python中c ++模块的内存使用情况

时间:2019-11-25 08:48:46

标签: python c++ pybind11

我使用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这样的托管语言的这种正常行为吗?我是否应该担心这种情况下的内存使用,还是在应用程序需要时信任垃圾回收器来清理内存?垃圾收集器是否还会处理这种东西,或者在发挥不同的作用机制?

0 个答案:

没有答案