Arc*_*ero 5 c++ python boost boost-python
我应该按值还是按 const 引用将 boost::python::object 对象传递给 C++ 函数?我几乎总是通过 const 引用传递 C++ 中的重要对象。然而,在 Boost Python 文档示例中,它们总是按值传递 boost::python::object 。所以我想知道这背后是否有原因,或者他们这样做只是为了让文本更容易阅读或其他什么。
boost::python::object 是一个简单的对象。
它只是 PyObject* 的包装器,因此对 boost::python::object 的引用基本上只是携带一个指向指针的指针。这是一种毫无意义的间接说法。
您确实可以通过传递引用来避免增加引用计数。但我猜测使用引用的间接性比增加引用计数更有害。
编辑
我整理了一个基准:
void by_value(boost::python::object o)
{
o + boost::python::object(1);
}
void by_const_ref(const boost::python::object & o)
{
o + boost::python::object(1);
}
Run Code Online (Sandbox Code Playgroud)
使用 -O3 编译时的结果
by-value: 9:215190247
by-const-ref: 5:764022989
Run Code Online (Sandbox Code Playgroud)
鉴于:
void by_value(boost::python::object o)
{
for(int x = 0;x < 1000;x++)
o + boost::python::object(1);
}
void by_const_ref(const boost::python::object & o)
{
for(int x = 0;x < 1000;x++)
o + boost::python::object(1);
}
Run Code Online (Sandbox Code Playgroud)
我得到:
by-value: 5:199017623
by-const-ref: 8:720536289
Run Code Online (Sandbox Code Playgroud)
@eudoxous是正确的,更新引用计数所需的写入非常昂贵。然而,使用引用引起的间接也是有代价的。然而,它似乎比我预期的要小。
| 归档时间: |
|
| 查看次数: |
1181 次 |
| 最近记录: |