imjacob的专栏

首页博文目录订阅
正 文

malloc工作机制

(2009/1/26 16:53)

自己一直不太理解,
(1) malloc是c和c++提供的库函数,和操作系统有什么关系?
(2)malloc分配的内存是物理连续的吗,逻辑连续的吗?
(3)malloc在那些没有虚拟地址的嵌入式操作系统上和有虚拟地址的桌面操作系统上有什么不同呢?
(4)碎片,无用单元,悬挂引用(悬挂指针)区别。碎片是你malloc/free用多了就会有的,无用单元是你光malloc没去free,悬挂引用是内存被free了但还是去用它。
===============================================================
malloc()工作机制

  malloc函数的实质体现在,它有一个将可用的内存块连接为一个长长的列表的所谓空闲链表。调用malloc函数时,它沿连接表寻找一个大到足以满足用户请求所需要的内存块。然后,将该内存块一分为二(一块的大小与用户请求的大小相等,另一块的大小就是剩下的字节)。接下来,将分配给用户的那块内存传给用户,并将剩下的那块(如果有的话)返回到连接表上。调用free函数时,它将用户释放的内存块连接到空闲链上。到最后,空闲链会被切成很多的小内存片段,如果这时用户申请一个大的内存片段,那么空闲链上可能没有可以满足用户要求的片段了。于是,malloc函数请求延时,并开始在空闲链上翻箱倒柜地检查各内存片段,对它们进行整理,将相邻的小空闲块合并成较大的内存块。

载自:http://www.gd-emb.org/detail/id-36209.html

评 论
还没有网友评论,欢迎您第一个评论!
博 主
进入imjacob的首页
博客名称:雅克的一府
日志总数:513
评论数量:853
访问次数:1876455
建立时间:2006/11/23 20:52
导 航
公 告
Locations of visitors to this page 本博客主要用于个人学习与资料收藏。当然大家应该读了之后也能学到不少东西。其中大多数资料都是来自网络,我转载时尽可能地表明文章出处与原作者姓名,但由于很多资料经多人转载,已不清楚原作者信息与出处,所以未表明相关…
评 论
链 接

ARM+LINUX 嵌入式博客
http://blog.chinaunix.net/u1/58780/index.html

嵌入式软件
http://blog.csdn.net/embeddedsoft

诚诚恳恳做人踏踏实实编程
http://blog.sina.com.cn/u/1244756857 

和我风格相似的一个blog
http://blogger.org.cn/blog/m…