gpt4 book ai didi

Python 和 C++ 共享相同的内存资源

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:59:33 26 4
gpt4 key购买 nike

假设我们正在使用 Python 并调用一些用 C++ 编写的 DLL 库。我们在 Python 中打开一个非常大的数据集,然后我们想调用一个用 C++ 编写的库,并添加一个数组,该数组将打开的数据作为参数。库会对该数组做一些事情,然后将其返回给 Python 代码。

那么问题来了:是否可以使用内存的相同位置? 因为在那种情况下我们不需要将大量数据复制两次。

最佳答案

这一切都取决于您如何将数据加载到内存中以及它是什么类型的数据。

如果它是数字数据并且您使用例如一个 numpy 数组,它已经存储了一个内存布局,可以从 C 或 C++ 代码中轻松使用。获取数据 block 的地址(numpy.ndarray.ctypes.data)并通过ctypes传递给C++代码很容易。你可以看到一个很好的例子 here .图像数据在这方面是类似的(PIL图像是一种简单的内存格式,并且可以很容易地获得指向它们数据的指针)。

另一方面,如果您的数据是常规的“原生”Python 结构(例如常规列表或常规对象),情况就更棘手了。您可以将它们直接传递给 C++ 代码,但它是必须了解 Python 数据结构的代码 - 因此,专门为此目的编写,使用 python.h 并处理重要的 Python API。

关于Python 和 C++ 共享相同的内存资源,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48776564/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com