我想知道使用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);此外,还有一个通过std::vector<Person>返回数百万人的C++函数。从技术上讲,为函数添加pybind11绑定很容易,但这样做是个好主意吗?
包装函数将返回一个包含person实例的Python列表。一般来说,在Python中,由于内存和GC开销的原因,拥有大量微小对象是低效的。Python中的典型解决方案是选择列式内存布局,但是这些担忧是否也适用于pybind11包装的类/结构?
具体地说:如果函数返回一百万个元素,pybind11会在内部创建另外一百万个包装器实例,还是绑定直接在C++对象上操作而不产生任何开销?成员的类型重要吗?
发布于 2019-08-27 20:20:47
pybind文档说它每次绑定时都会复制结构。这意味着这些结构和容器在Python和C++中是独立的,所以C++容器中的数据更改不会在Python中反映出来(没有引用)。这也意味着它将复制C++和Python中的数据-- C++容器中有100万个元素,Python中有100万个元素。
查看此处- https://pybind11.readthedocs.io/en/stable/advanced/cast/stl.html
https://stackoverflow.com/questions/57673994
复制相似问题