【发布时间】:2013-03-08 13:41:33
【问题描述】:
在 64 位 Windows 上用 C++ 编写 JIT 编译器,生成的代码有时需要调用用 C++ 编写的运行时函数。目前我正在分配内存来放置生成的代码VirtualAlloc(0, bytes, MEM_COMMIT, PAGE_EXECUTE_READWRITE);最后一个标志很重要,因为分配的内存不可执行。
VirtualAlloc 可能会在 64 位地址空间中的任何位置返回内存,这对于数据来说很好(其中通常需要超过 4 GB,因此它确实需要 64 位寻址),但最x64 call 指令的有效形式需要 32 位 IP 相对偏移量,并且由于生成的代码量将小于 4 GB,因此最好将其定位在已编译代码的 32 位位移内来自 C++。
有办法安排吗?
【问题讨论】:
标签: windows 64-bit jit virtualalloc