64ビットWindows上のC++でJITコンパイラを作成すると、生成されたコードは、C++で作成されたランタイム関数を呼び出す必要がある場合があります。現時点では、生成されたコードを配置するためのメモリを割り当てていVirtualAlloc(0, bytes, MEM_COMMIT, PAGE_EXECUTE_READWRITE)
ます。割り当てられたメモリは他の方法では実行できないため、最後のフラグは重要です。
VirtualAlloc
おそらく64ビットアドレス空間のどこにでもメモリを返すことができます。これはデータには問題ありませんが(一般に4ギガバイト以上が必要になるため、64ビットアドレス指定が必要です)、x64call
命令の最も効率的な形式です。 32ビットのIP相対オフセットが必要であり、生成されるコードの量は4ギガバイト未満になるため、C++からコンパイルされたコードの32ビットの変位内に配置することが望ましいでしょう。
これを手配する方法はありますか?