【问题标题】:Allocating memory space from python3 and pass the pointer to C从python3分配内存空间并将指针传递给C
【发布时间】:2020-10-30 13:00:25
【问题描述】:

我已经建立了一个由 py​​thon 层和 C++ 层组成的库。在 C++ 层中,我需要将一大块内存保留在堆中,因此必须在编译时动态分配该块。

我想做的是让这块内存可以从 python 端进行配置。有没有办法从python动态分配内存空间并将指针传递给C++层?

谢谢

【问题讨论】:

    标签: python python-3.x pointers memory heap-memory


    【解决方案1】:

    通过引用或指针使用 ctypes

    要动态分配内存,您可以在 Python 中创建变量或数组 (最好使用 ctypes 提供的数据类型) 那么你可以通过一个函数左右将指针传递给C++层

    见:https://docs.python.org/3/library/ctypes.html#passing-pointers-or-passing-parameters-by-reference

    【讨论】:

      【解决方案2】:

      您可以使用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保存了分配的内存地址

      【讨论】:

      • 谢谢。但看起来这是依赖于操作系统的。我想没有通用的方法可以从 python 创建内存,它适用于 windows 和 linux。
      猜你喜欢
      • 1970-01-01
      • 2012-07-03
      • 1970-01-01
      • 2012-03-15
      • 2014-06-03
      • 2011-01-16
      • 1970-01-01
      • 2016-02-09
      • 2018-07-31
      相关资源
      最近更新 更多