读书人

一个进程里面的线程malloc的内存是什么

发布时间: 2012-03-11 18:15:38 作者: rapoo

一个进程里面的线程malloc的内存是什么时候释放的?
请问
一个进程里面的线程malloc的内存如果不手工free
是什么时候释放的?
是在进程exit的时候还是线程退出的时候?

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


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

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

[解决办法]

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


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

读书人网 >C语言

热点推荐