我已经建立了一个由 python 层和 C++ 层组成的库。在 C++ 层中,我需要将一大块内存保留在堆中,因此必须在编译时动态分配该块。
我想要做的是让这块内存可以从 python 端进行配置。有没有办法从 python 动态分配内存空间并将指针传递给 C++ 层?
谢谢
我已经建立了一个由 python 层和 C++ 层组成的库。在 C++ 层中,我需要将一大块内存保留在堆中,因此必须在编译时动态分配该块。
我想要做的是让这块内存可以从 python 端进行配置。有没有办法从 python 动态分配内存空间并将指针传递给 C++ 层?
谢谢
使用 ctypes byref 或指针
要动态分配内存,您可以在 Python 中创建一个变量或数组(最好使用 ctypes 提供的数据类型),然后您可以通过一个函数左右将指针传递给 C++ 层
见:https ://docs.python.org/3/library/ctypes.html#passing-pointers-or-passing-parameters-by-reference
您可以使用ctypes库来调用 DLL/共享库。
视窗:
import ctypes
dwFlags = ctypes.c_int(0x00000008) # HEAP_ZERO_MEMORY
szSize = 256 # Size of the area you want to allocate
addr = ctypes.windll.kernel32.HeapAlloc(ctypes.windll.kernel32.GetProcessHeap(), ctypes.c_int(dwFlags), ctypes.c_int(szSize))
现在变量addr保存了分配的内存地址