LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
查看: 1593|回复: 5

关于malloc与内存泄露问题

[复制链接]
发表于 2008-10-7 20:27:40 | 显示全部楼层 |阅读模式
一个进程使用C库函数malloc声请内存时,会调用brk()声请进程可用的堆线性区,然后分配物理内存映射到此线性区,
进程页表表项中会有对应的物理页描述。
当进程exit()结束时,会调用exit_mmap(),释放掉进程所有映射到可用线性区的物理页面,也即释放掉页表中对应的
所有物理页面,包括了由malloc声请来的内存。
那么为什么说malloc后没有free,程序结束会导致内存泄露呢?
谢谢!
发表于 2008-10-7 21:51:37 | 显示全部楼层
Post by shenjiajia1225;1891468
一个进程使用C库函数malloc声请内存时,会调用brk()声请进程可用的堆线性区,然后分配物理内存映射到此线性区,
进程页表表项中会有对应的物理页描述。
当进程exit()结束时,会调用exit_mmap(),释放掉进程所有映射到可用线性区的物理页面,也即释放掉页表中对应的
所有物理页面,包括了由malloc声请来的内存。
那么为什么说malloc后没有free,程序结束会导致内存泄露呢?
谢谢!


内存泄露的问题在7x24小时不退出的程序中才比较严重

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

使用道具 举报

 楼主| 发表于 2008-10-7 22:25:13 | 显示全部楼层
恩 , 内存泄露的概念理解错了
回复 支持 反对

使用道具 举报

 楼主| 发表于 2008-10-7 22:26:01 | 显示全部楼层
谢谢    :)
回复 支持 反对

使用道具 举报

发表于 2008-10-8 21:40:32 | 显示全部楼层
进程不一定会退出的.有些程序可能要运行几天,比如手机上面的deamon,如果一直malloc,而没有free,内存就消耗得越来越少了。
回复 支持 反对

使用道具 举报

发表于 2008-10-8 21:41:26 | 显示全部楼层
楼主,提醒一个问题brk()只是malloc的一种方式,还可以用mmap实现,这在于libc的实现
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表