+ -
当前位置:首页 → 问答吧 → 关于malloc与内存泄露问题

关于malloc与内存泄露问题

时间:2008-10-08

来源:互联网

一个进程使用C库函数malloc声请内存时,会调用brk()声请进程可用的堆线性区,然后分配物理内存映射到此线性区,
进程页表表项中会有对应的物理页描述。
当进程exit()结束时,会调用exit_mmap(),释放掉进程所有映射到可用线性区的物理页面,也即释放掉页表中对应的
所有物理页面,包括了由malloc声请来的内存。
那么为什么说malloc后没有free,程序结束会导致内存泄露呢?
谢谢!

作者: shenjiajia1225   发布时间: 2008-10-08

引用:
作者: shenjiajia1225
一个进程使用C库函数malloc声请内存时,会调用brk()声请进程可用的堆线性区,然后分配物理内存映射到此线性区,
进程页表表项中会有对应的物理页描述。
当进程exit()结束时,会调用exit_mmap(),释放掉进程所有映射到可用线性区的物理页面,也即释放掉页表中对应的
所有物理页面,包括了由malloc声请来的内存。
那么为什么说malloc后没有free,程序结束会导致内存泄露呢?
谢谢!
内存泄露的问题在7x24小时不退出的程序中才比较严重

程序退出肯定是会free的。但并非所有程序都会退出。也并非所有电脑都会每天关机。

作者: poet   发布时间: 2008-10-08

恩 , 内存泄露的概念理解错了

作者: shenjiajia1225   发布时间: 2008-10-08

谢谢 :)

作者: shenjiajia1225   发布时间: 2008-10-08

进程不一定会退出的.有些程序可能要运行几天,比如手机上面的deamon,如果一直malloc,而没有free,内存就消耗得越来越少了。

作者: hanchao3c   发布时间: 2008-10-09

楼主,提醒一个问题brk()只是malloc的一种方式,还可以用mmap实现,这在于libc的实现

作者: hanchao3c   发布时间: 2008-10-09