malloc的工作原理是什么?

butterflygogogo 2011-03-18 11:11:27
请问各位大侠
malloc是怎么工作? 做了哪些事才分配出内存的?
另外就是nedpmalloc又是怎么分配的?
求大侠解答
...全文
323 15 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
15 条回复
切换为时间正序
请发表友善的回复…
发表回复
某某9 2011-03-20
  • 打赏
  • 举报
回复
会用即可吧
cxyOOOO 2011-03-19
  • 打赏
  • 举报
回复
crt函数,和crt实现相关。

如vc8下的malloc可能会是三模式(系统模式、sbhv5、sbhv6)之一,受os版本、工具版本、环境变量影响(可能)。
crt初始化时,一般情况选择系统模式。此时malloc的性能等于HeapAlloc提供的性能,如LFH。
  • 打赏
  • 举报
回复
呃...

struct mem_control_block {

int is_available;

int size;

};

void malloc_init()

{

/* grab the last valid address from the OS */

last_valid_address = sbrk(0);

/* we don''t have any memory to manage yet, so

*just set the beginning to be last_valid_address

*/

managed_memory_start = last_valid_address;

/* Okay, we''re initialized and ready to go */

has_initialized = 1;

}
http://blog.csdn.net/namelij/archive/2011/03/17/6256597.aspx//ACE里面malloc的实现机制



辰岡墨竹 2011-03-18
  • 打赏
  • 举报
回复
VC的malloc直接调用的HeapAlloc从默认堆里分配任意长度内存,在上面做了简单的封装和增加调试机制,Windows自己的Heap函数已经在零碎数据上已经很够用了。Linux下的一般是直接分配页,然后自己维护链表来管理,一般都有一个比较优化的分配策略。
ccltiancai 2011-03-18
  • 打赏
  • 举报
回复
crt最终都要调用系统相关的api的。
malloc就是从系统中取出xx个page。然后在分给你。同时做些记录。。
赵4老师 2011-03-18
  • 打赏
  • 举报
回复
《操作系统》内存管理
龙哥依旧 2011-03-18
  • 打赏
  • 举报
回复
windows系统上调用windows的api申请内存
别的系统不知道!
aiwnx 2011-03-18
  • 打赏
  • 举报
回复
还有根据请求内存大小不同选择不同分配策略,比如分配一个字节和一万个字节的分配策略是不同的
debug版本的malloc 在内存头保留了一份_HEAP_ENTRY和_HEAP_USERDATA_HEADER结构,用于保存调试信息,定位出错代码
butterflygogogo 2011-03-18
  • 打赏
  • 举报
回复
关于nedmalloc是什么机制
网上说的是多线程 我不太理解
pengzhixi 2011-03-18
  • 打赏
  • 举报
回复
还有的就是控制了同步。
pengzhixi 2011-03-18
  • 打赏
  • 举报
回复
调用了API,然后做了些对齐,记录的工作。
RabbitLBJ 2011-03-18
  • 打赏
  • 举报
回复
基本原理就是自己维护一个内存链表,链表有剩余就在这里面直接取出来给程序,如果没有了就进行系统调用,分配一块大内存,填充进链表,继续以上步骤
RabbitLBJ 2011-03-18
  • 打赏
  • 举报
回复
推荐楼主看C专家编程,里面说的很详细
luciferisnotsatan 2011-03-18
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 zhao4zhong1 的回复:]

《操作系统》内存管理
[/Quote]

65,189

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧