我正在开发一个JIT编译器,它将在内存中生成机器码。这个JIT主要针对64位的POSIX x86系统,我担心代码中的跳转总是可以编码为32位的相对偏移量。我想做的是为机器代码映射一个2-4 4GB的可执行内存块,并自己管理这个内存区。
我特别想知道的是:在64位系统上,即使系统没有4 4GB的内存,一次映射4 4GB的内存对我来说安全吗?我假设大多数(或所有) OSes实际上不会分配我没有写入的页,所以如果我总是先分配较低的地址,只要我实际使用的内存不超过系统物理占用的内存,我就没有问题。
我也很想听到关于如何管理机器代码分配的替代建议,以便机器代码始终驻留在64位机器上相同的4 4GB空间中。
发布于 2013-10-29 09:00:31
4 4GB的mmap可能会成功分配虚拟内存,并且物理页面将在它们被“弄脏”或被您的程序修改时被分配。如果您耗尽了物理内存,您的进程可能会终止。另请参阅this question。
https://stackoverflow.com/questions/19647660
复制相似问题