日期:2014-05-16  浏览次数:20564 次

linux 开发程序的内存释放问题
首先我是通过top查看我的程序的内存使用情况

1.我使用第一种方法申请空间后再delete释放,是可以恢复到刚刚进入程序时使用的内存大小的
2.但是如果使用第二种方法,申请再delete释放后,内存使用没有降下来
3.我如果把char data[9];  改为char data[1024];  第二种方法的delete就可以成功的释放内存

以上现象是为什么呢?内存碎片吗?我的需求只能是9个字节,如何才能可以释放掉使用内存呢?

#include <stdio.h>

#define  MEMLEN 1024*1024
class hugedata {
public:
    hugedata(){}
    char data[9];      //此处如果1024  下面第二种方法delete就可以释放掉内存
};


int main ()
{
//第一种方法
    getchar();
    hugedata *d = new hugedata[MEMLEN];
    getchar();
    delete[] d;
    getchar();

/*  //第二种方法
    getchar();
    hugedata *d[MEMLEN];
    for(long i = 0; i < MEMLEN; i++)
    {
        d[i] = new hugedata();
    }
    getchar();
    for(long i = 0; i < MEMLEN; i++)
    {
        delete d[i];
    }
    getchar();
*/
return 0;
}
Linux 内存

------解决方案--------------------
应用层内存池是解决此问题的方法。