我正在研究JIT编译器,它将在内存中生成机器代码。这个JIT主要针对64位POSIX x86系统,我担心代码中的跳转始终可编码为32位相对偏移。我想做的是为机器代码mmap一个2-4GB的可执行内存块,并自己管理这个内存区域。
我特别想知道的是:在64位系统上,即使系统没有4GB内存,我可以安全地同时映射4GB内存吗?我假设大多数(或所有)操作系统不会真正分配我不写的页面,所以如果我总是首先分配在较低的地址,我会好的,只要我实际上并没有比系统实际使用更多的内存。
我也很想知道如何管理机器代码分配的其他建议,以便机器代码始终位于64位机器上相同的4GB空间中。
答案 0 :(得分:1)
您的mmap
4GB可能会成功分配虚拟内存,物理页面将被分配,因为它们被“弄脏”或被您的程序修改。如果物理内存不足,则可能会终止进程。另见this question。