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

2024-04-20 10:34:41 发布

您现在位置:Python中文网/ 问答频道 /正文

我用pybind11编写了一个c++模块,我想在Python中使用它。其中包括以下代码:

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


Tags: 模块内存代码foolinuxbar情况class