我正在开发一个 JIT 编译器,它将在内存中生成机器代码。此 JIT 主要针对 64 位 POSIX x86 系统,我担心代码中的跳转总是可编码为 32 位相对偏移量。我想做的是为机器代码映射一个 2-4GB 的可执行内存块,并自己管理这个内存区域。
我特别想知道的是:即使系统没有 4GB 内存,在 64 位系统上一次映射 4GB 内存对我来说是否安全?我假设大多数(或所有)操作系统不会真正分配我不写入的页面,所以如果我总是先分配低地址,我会没事的,只要我实际上使用的内存不会超过系统实际拥有的内存。
我也很想听听有关如何管理机器代码分配的替代建议,以便机器代码始终驻留在 64 位机器上的相同 4GB 空间中。