Мне нужно выделить определенное место в памяти, и я использовал для этого VirtualAlloc
. Однако я все чаще замечаю, что VirtualAlloc
возвращает адрес, который превышает 32 бита, хотя всегда меньше 33 бит. В результате, когда я копирую данные на этот адрес памяти, компьютер падает на 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
.