Chinaunix
标题:
linux下malloc/free申请释放问题???
[打印本页]
作者:
daxiguagg
时间:
2014-04-21 11:58
标题:
linux下malloc/free申请释放问题???
本帖最后由 daxiguagg 于 2014-04-21 12:17 编辑
malloc/free申请释放问题???
下面是模拟一个程序的执行情况。
int main(int argc, char** argv) {
void *buf[2000];
int i=0,fds=2000;
for (i=0;i<fds;i++) //循环申请内存2000次,大概125MB
{
buf[i]=malloc(65536);//malloc函数分配内存,请求内存小于128K,malloc函数会调用brk系统调用,将_edata指针往高地址推
memset(buf[i],0,65536);//第一次访问已分配的虚拟地址空间的时候,发生缺页中断,系统负责分配物理内存,然后建立虚拟内存和物理内存之间的映射关系。
}
sleep(60); //模拟等待处理一些工作。
for (i=0;i<1999;i++)
{
free(buf[i]);//循环释放,按理说free(buf[0]);到free(buf[1998]);已经释放了大量内存,但程序依然占用125MB。是因为brk分配的内存需要等到高地址内存释放以后才能释放,也就是说,free(buf[1999])没有释放的话,之前的所有释放都没有释放。最终导致程序一直占用125M多内存一直得不到释放。
printf("%d\n",i);
}
sleep(10000);
return (EXIT_SUCCESS);
}
怎样能在这种环境情况下及时的释放内存呢?
复制代码
作者:
timespace
时间:
2014-04-21 12:21
回复
1#
daxiguagg
如果偶尔申请大块内存,且需要及时释放,考虑mmap;如果内存分配模式简单而频繁,考虑维护一个内存池;其它情况就直接malloc/free,别做太多杞人忧天的事情。
作者:
MMMIX
时间:
2014-04-21 16:11
timespace 发表于 2014-04-21 12:21
别做太多杞人忧天的事情。
过早优化乃99%万恶之源啊。
作者:
daxiguagg
时间:
2014-04-21 18:06
只是闲来无事,发现有这个问题存在,想探讨一下看有些什么方法解决而已
欢迎光临 Chinaunix (http://bbs.chinaunix.net/)
Powered by Discuz! X3.2