2

我正在开发一个 JIT 编译器,它将在内存中生成机器代码。此 JIT 主要针对 64 位 POSIX x86 系统,我担心代码中的跳转总是可编码为 32 位相对偏移量。我想做的是为机器代码映射一个 2-4GB 的可执行内存块,并自己管理这个内存区域。

我特别想知道的是:即使系统没有 4GB 内存,在 64 位系统上一次映射 4GB 内存对我来说是否安全?我假设大多数(或所有)操作系统不会真正分配我不写入的页面,所以如果我总是先分配低地址,我会没事的,只要我实际上使用的内存不会超过系统实际拥有的内存。

我也很想听听有关如何管理机器代码分配的替代建议,以便机器代码始终驻留在 64 位机器上的相同 4GB 空间中。

4

1 回答 1

1

mmap的 4GB 可能会成功分配虚拟内存,而物理页面将在“脏”或被您的程序修改时分配。如果你的物理内存用完了,你的进程可能会被终止。另请参阅这个问题

于 2013-10-29T01:00:30.657 回答