首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > VC/MFC >

请教使用malloc与HeapAlloc分配的内存有什么区别

2012-01-13 
请问使用malloc与HeapAlloc分配的内存有什么区别?两者都是在堆上分配,除了malloc是标准库里面的可以移植,

请问使用malloc与HeapAlloc分配的内存有什么区别?
两者都是在堆上分配,除了malloc是标准库里面的可以移植,而HeapAlloc是Win32   API不能移植以外,他们有什么区别?分配的内存在本质上是否相同?

[解决办法]
malloc是在CRT的内存堆上分配的,这个堆的存在一般来说你是不会关心的
HeapAlloc则不同,你需要给它指定你想从哪个堆上分配,而这个堆是从HeapCreate创建出来的

HeapAlloc大多是用于自己管理堆的情况
[解决办法]
malloc可以移植是因为在不同的操作系统上有各自的实现,而所有平台上就叫这个名字。比如在Widnows
上,VC中调用malloc时,其实在malloc内部就是通过调用Windows API HeapAlloc在指定的堆上分配内存的
,而C++ Builder中调用malloc,其实在malloc内部调用AirtualAlloc,所以不同的编译器也有不同的实现,
但都是以OS的API为基础的,所以你的问题的回答其实是调用与被调用的关系.
[解决办法]
malloc最终是调用HeapAlloc的,两者最终会到RtlAllocateHeap中。

热点排行