我使用pybind11编写了一个我想在Python中使用的c ++模块。其中包含以下代码:
class Foo{
...
void Foo::Bar(BigObject& returnBigObject)
{
for (int i=0; i<4; i++)
{
BigObject tempObject;
//doStuffWithTempObject
returnBigObject += tempObject;
}
}
};
现在,我已将此代码公开给python,并且可以按预期运行。但是,当我查看内存使用情况时,我发现当BigObject tempobject
超出范围时,并不总是释放内存。这意味着,如果我查看psutil.Process(os.getpid()).memory_info().rss
,内存不会下降到我期望的水平。经过一些调试后,我将其追溯到此临时BigObject
。
我也在Linux而不是Windows上看到这种行为,在Linux上,它的发生在很大程度上取决于我在调用此函数之前编写的代码。
我的问题是,像Pyhton这样的托管语言的这种正常行为吗?我是否应该担心这种情况下的内存使用,还是在应用程序需要时信任垃圾回收器来清理内存?垃圾收集器是否还会处理这种东西,或者在发挥不同的作用机制?