- 论坛徽章:
- 1
|
本帖最后由 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);
- }
- 怎样能在这种环境情况下及时的释放内存呢?
复制代码 |
|