在线等!malloc 和 new 分配内存后的释放问题
满头大汗调试了一天,就是不行!
细节就不多说了,我先用malloc分配内存,free释放,程序运行2分钟后任务管理器(PF占用率)显示内存占用高达2G,而奇怪的是在性能一栏,我的程序的内存占用率一直在400-500M左右徘徊!
于是上网一顿海查,碰到如下解释
///////////////////////////////////////////////////////
malloc与free是C++/C语言的标准库函数,new/delete是C++的运算符。它们都可用于申请动态内存和释放内存。
对于非内部数据类型的对象而言,光用maloc/free无法满足动态对象的要求。对象在创建的同时要自动执行构造函数,对象在消亡之前要自动执行析构函数。由于malloc/free是库函数而不是运算符,不在编译器控制权限之内,不能够把执行构造函数和析构函数的任务强加于malloc/free。
因此C++语言需要一个能完成动态内存分配和初始化工作的运算符new,以及一个能完成清理与释放内存工作的运算符delete。注意new/delete不是库函数。
类Obj的函数Initialize模拟了构造函数的功能,函数Destroy模拟了析构函数的功能。函数UseMallocFree中,由于 malloc/free不能执行构造函数与析构函数,必须调用成员函数Initialize和Destroy来完成初始化与清除工作。函数 UseNewDelete则简单得多。
所以我认为:由于free操作后,并不是立刻执行析构函数,所以没有立即释放资源,所以内存并没有立即增加。
///////////////////////////////////////////////////////
兴奋,于是动手把用到malloc的地方都改成了new,当然delete也是配了对的,然而,结果和用malloc的情况一样!开动程序后PF内存占用直线上升,一会儿就飙到2G了!然而在性能一栏,我的程序的内存占用仍然只有4、500M!
程序很大,是基因序列分析方面的,我就不贴上来了,我也不算是菜鸟了,所以一般的提问,回答什么的就请您围观一下。据说是分配的动态内存释放后都没有直接还给OS,是这个原因引起的吗?如果是这样,怎么才能还给OS呢?