关于malloc与内存泄露问题
时间:2008-10-08
来源:互联网
一个进程使用C库函数malloc声请内存时,会调用brk()声请进程可用的堆线性区,然后分配物理内存映射到此线性区,
进程页表表项中会有对应的物理页描述。
当进程exit()结束时,会调用exit_mmap(),释放掉进程所有映射到可用线性区的物理页面,也即释放掉页表中对应的
所有物理页面,包括了由malloc声请来的内存。
那么为什么说malloc后没有free,程序结束会导致内存泄露呢?
谢谢!
进程页表表项中会有对应的物理页描述。
当进程exit()结束时,会调用exit_mmap(),释放掉进程所有映射到可用线性区的物理页面,也即释放掉页表中对应的
所有物理页面,包括了由malloc声请来的内存。
那么为什么说malloc后没有free,程序结束会导致内存泄露呢?
谢谢!
作者: shenjiajia1225 发布时间: 2008-10-08
引用:
作者: shenjiajia1225
一个进程使用C库函数malloc声请内存时,会调用brk()声请进程可用的堆线性区,然后分配物理内存映射到此线性区,
进程页表表项中会有对应的物理页描述。 当进程exit()结束时,会调用exit_mmap(),释放掉进程所有映射到可用线性区的物理页面,也即释放掉页表中对应的 所有物理页面,包括了由malloc声请来的内存。 那么为什么说malloc后没有free,程序结束会导致内存泄露呢? 谢谢! |
程序退出肯定是会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
相关阅读 更多
热门阅读
-
office 2019专业增强版最新2021版激活秘钥/序列号/激活码推荐 附激活工具
阅读:74
-
如何安装mysql8.0
阅读:31
-
Word快速设置标题样式步骤详解
阅读:28
-
20+道必知必会的Vue面试题(附答案解析)
阅读:37
-
HTML如何制作表单
阅读:22
-
百词斩可以改天数吗?当然可以,4个步骤轻松修改天数!
阅读:31
-
ET文件格式和XLS格式文件之间如何转化?
阅读:24
-
react和vue的区别及优缺点是什么
阅读:121
-
支付宝人脸识别如何关闭?
阅读:21
-
腾讯微云怎么修改照片或视频备份路径?
阅读:28