gpt4 book ai didi

python - pybind11 包装的对象的内存开销?

转载 作者:行者123 更新时间:2023-11-28 01:18:49 26 4
gpt4 key购买 nike

我想知道使用由 pybind11 包装的 C++ 类/结构是否有任何内存开销。让我们考虑一个简单的例子:

struct Person {
std::string name;
int age;
}

// With some basic bindings
pybind11::class_<Person>(m, "Person")
.def_readwrite("name", &Person::name)
.def_readwrite("age", &Person::age);

此外,还有一个 C++ 函数可以通过 std::vector<Person> 返回数百万人。 .从技术上讲,为函数添加 pybind11 绑定(bind)很容易,但这样做是个好主意吗?

包装该函数会返回一个 Person 实例的 Python 列表。通常在 Python 中,由于内存和 GC 开销,拥有大量微小对象是低效的。 Python 中的典型解决方案是选择列式内存布局,但这些担忧是否也适用于 pybind11 包装的类/结构?

具体来说:如果函数返回 100 万个元素,pybind11 是否会在内部创建另外 100 万个包装器实例,或者绑定(bind)是否直接在 C++ 对象上操作而没有任何开销?成员的类型重要吗?

最佳答案

pybind 文档说它每次都在绑定(bind)中复制结构。这意味着这些结构和容器在 Python 和 C++ 中是独立的,因此 C++ 容器中的数据更改不会反射(reflect)在 Python 中(无引用)。这也意味着它将复制 C++ 和 Python 中的数据 - C++ 容器中的 100 万个元素和 Python 中的 100 万个元素。

请看这里 - https://pybind11.readthedocs.io/en/stable/advanced/cast/stl.html

关于python - pybind11 包装的对象的内存开销?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57673994/

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