首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >pybind11包装的对象的内存开销?

pybind11包装的对象的内存开销?
EN

Stack Overflow用户
提问于 2019-08-27 19:45:55
回答 1查看 291关注 0票数 1

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

代码语言:javascript
复制
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++对象上操作而不产生任何开销?成员的类型重要吗?

EN

回答 1

Stack Overflow用户

发布于 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

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/57673994

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档