【发布时间】:2020-10-30 13:00:25
【问题描述】:
我已经建立了一个由 python 层和 C++ 层组成的库。在 C++ 层中,我需要将一大块内存保留在堆中,因此必须在编译时动态分配该块。
我想做的是让这块内存可以从 python 端进行配置。有没有办法从python动态分配内存空间并将指针传递给C++层?
谢谢
【问题讨论】:
标签: python python-3.x pointers memory heap-memory
我已经建立了一个由 python 层和 C++ 层组成的库。在 C++ 层中,我需要将一大块内存保留在堆中,因此必须在编译时动态分配该块。
我想做的是让这块内存可以从 python 端进行配置。有没有办法从python动态分配内存空间并将指针传递给C++层?
谢谢
【问题讨论】:
标签: python python-3.x pointers memory heap-memory
通过引用或指针使用 ctypes
要动态分配内存,您可以在 Python 中创建变量或数组 (最好使用 ctypes 提供的数据类型) 那么你可以通过一个函数左右将指针传递给C++层
见:https://docs.python.org/3/library/ctypes.html#passing-pointers-or-passing-parameters-by-reference
【讨论】:
您可以使用ctypes 库来调用 DLL/共享库。
Windows:
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保存了分配的内存地址
【讨论】: