メモリに特定のスペースを割り当てる必要があり、VirtualAlloc
これに使用しています。VirtualAlloc
ただし、常に 33 ビット未満であるにもかかわらず、 が 32 ビットを超えるアドレスを返すことにますます気づきました。その結果、データをこのメモリ アドレスにコピーすると、コンピューターがクラッシュして BSOD が発生します。
64 ビットの Windows と 64 ビットの Python を使用しています。データをメモリにコピーするプログラムは 32 ビットしか扱えないのではないかと思います。VirtualAlloc
アドレスを 32 ビット以内で提供することを強制する方法はありますか?
私はPython
、具体的にはctypes
を呼び出すパッケージを使用していVirtualAlloc
ます。以下のコードを参照してください。このコードを複数回実行するとアドレスが変化するため、以下の関数を繰り返し呼び出すと最終的に 32 ビット未満のアドレスになります。ただし、問題の原因とフェイルセーフな解決策を探しています。どんな助けでも大歓迎です。
import ctypes
mem_commit = 0x1000
page_readwrite = 0x4
size_bytes = 200000 # Allocation sizes are usually around this value
ctypes.windll.kernel32.VirtualAlloc.argtypes = [
ctypes.c_void_p, ctypes.c_long, ctypes.c_long, ctypes.c_long]
ctypes.windll.kernel32.VirtualAlloc.restype = ctypes.c_int
addr = ctypes.windll.kernel32.VirtualAlloc(
0, ctypes.c_long(size_bytes), mem_commit, page_readwrite)
を使用して後でメモリを解放することに注意してくださいVirtualFree
。