malloc和free是怎么工作的。
2015-04-24 23:40
281 查看
free一般不会把内存还给系统(只会发生在一些很罕见的情况下)
第一个原因是这是在你的堆中产生很多碎片,这样在你申请完2G或者4G的虚拟内存后产生很多内存碎片。
第二个原因是操作系统一般只能处理那些固定大小或者是对齐的内存块,比如4KB,例如你申请了一个堆之后,再申请一个堆,删除前面一个堆,这样就会产生内存碎片。
free函数将会把内存块放回自己的内存块链表中,一般自由链表块会合并毗连的地址空间.自由链表块是一个内存块的循环链表,并且在每个内存块的头部存有管理数据。因为很小的内存块已经合并过了,这个时候再把很小的内存还给操作系统这是效率很低的一件事情。
新申请堆时,如果从自由链表那里取到比较大的内存,这取出一部分给调用者,另一部分还给自由链表
第一个原因是这是在你的堆中产生很多碎片,这样在你申请完2G或者4G的虚拟内存后产生很多内存碎片。
第二个原因是操作系统一般只能处理那些固定大小或者是对齐的内存块,比如4KB,例如你申请了一个堆之后,再申请一个堆,删除前面一个堆,这样就会产生内存碎片。
free函数将会把内存块放回自己的内存块链表中,一般自由链表块会合并毗连的地址空间.自由链表块是一个内存块的循环链表,并且在每个内存块的头部存有管理数据。因为很小的内存块已经合并过了,这个时候再把很小的内存还给操作系统这是效率很低的一件事情。
新申请堆时,如果从自由链表那里取到比较大的内存,这取出一部分给调用者,另一部分还给自由链表
相关文章推荐
- 浅谈C中的malloc和free\\感谢lj_860603,工作了,没时间验证了,觉得挺好的,转载了
- 操作系统动态内存管理——malloc和free的工作机制
- 高质量C++编程之(7.8 有了malloc/free 为什么还要new/delete ?7.9 内存耗尽怎么办?)
- malloc/free and new/delete 工作机制
- 浅谈malloc和free工作机理
- malloc与free的原理
- malloc&&free 与new&&delete 的区别
- new/delete 和malloc/free 的区别一般汇总
- malloc和free(2)——malloc()申请内存得到指针,指针被改动,用free释放内存报错
- 下了个C-Free,结果点新建,出来的就是.cpp 怎么变成.c呢。。。他默认新建文件是c++的啊,
- malloc的内存用free释放后为何系统回收不了
- malloc和free的实现原理
- malloc/free与new/delete
- JavaScript中的Timer是怎么工作的
- 在北上广工作压强下,幸福是怎么炼成的
- C语言中的malloc和free
- malloc/free和new/delete的区别
- malloc、calloc、realloc、free
- DLL和exe里的malloc和free不能混用
- Malloc/new和delete/free的区别