假设我们正在使用Python并调用一些用C++编写的DLL库。我们在 Python 中打开一个非常大的数据集,然后我们想调用一个用 C++ 编写的库,并添加一个以打开的数据作为参数的数组。库会对该数组做一些事情,然后将它返回给 Python 代码。
所以问题是:是否可以使用内存的相同位置?因为在那种情况下,我们不需要将大量数据复制两次。
这一切都取决于您如何将数据加载到内存中以及它是什么类型的数据。
如果它是数字数据并且您使用例如 numpy 数组,则它已经存储在可以从 C 或 C++ 代码中轻松使用的内存布局中。获取数据块( numpy.ndarray.ctypes.data)的地址并通过ctypes传递给C++代码很容易。你可以在这里看到一个很好的例子。图像数据在这方面是类似的(PIL 图像采用简单的存储格式,可以轻松获取指向其数据的指针)。
另一方面,如果您的数据是常规的“本机”Python 结构(例如常规列表或常规对象),则情况会更加棘手。您可以将它们直接传递给 C++ 代码,但这些代码必须了解 Python 数据结构——因此,专门为此目的而编写,使用python.h和处理非平凡的 Python API。