2014-03-14周五工作日志:HeapAlloc与malloc的区别
2014-03-14 11:53
288 查看
malloc是在CRT的内存堆上分配的,这个堆的存在一般来说你是不会关心的
HeapAlloc则不同,你需要给它指定你想从哪个堆上分配,而这个堆是从HeapCreate创建出来的
HeapAlloc大多是用于自己管理堆的情况
malloc可以移植是因为在不同的操作系统上有各自的实现,而所有平台上就叫这个名字。比如在Widnows上,VC中调用malloc时,其实在malloc内部就是通过调用Windows API HeapAlloc在指定的堆上分配内存的,而C++ Builder中调用malloc,其实在malloc内部调用AirtualAlloc,所以不同的编译器也有不同的实现,
但都是以OS的API为基础的,所以你的问题的回答其实是调用与被调用的关系.
malloc(); 和 HeapAlloc(); 都是从堆中分配相应的内存
不同的是一个是c run time的函数 一个是windows系统的函数
这么说你应该可以想到 对于windows程序来说 使用HeapAlloc();会比malloc();效率稍稍高一些
实际也是这样的 其实有许多crt的函数 ms在win中都提供了相似功能的系统函数
HeapAlloc和malloc的区别在于他们属于不同的函数库。前者属于平台sdk,后者则是标准库。
两个函数在分配空间时都是分配在堆中,实现结果也有细微差别。如malloc分配的实际空间可能比你指定的多些
HeapAlloc则不同,你需要给它指定你想从哪个堆上分配,而这个堆是从HeapCreate创建出来的
HeapAlloc大多是用于自己管理堆的情况
malloc可以移植是因为在不同的操作系统上有各自的实现,而所有平台上就叫这个名字。比如在Widnows上,VC中调用malloc时,其实在malloc内部就是通过调用Windows API HeapAlloc在指定的堆上分配内存的,而C++ Builder中调用malloc,其实在malloc内部调用AirtualAlloc,所以不同的编译器也有不同的实现,
但都是以OS的API为基础的,所以你的问题的回答其实是调用与被调用的关系.
malloc(); 和 HeapAlloc(); 都是从堆中分配相应的内存
不同的是一个是c run time的函数 一个是windows系统的函数
这么说你应该可以想到 对于windows程序来说 使用HeapAlloc();会比malloc();效率稍稍高一些
实际也是这样的 其实有许多crt的函数 ms在win中都提供了相似功能的系统函数
HeapAlloc和malloc的区别在于他们属于不同的函数库。前者属于平台sdk,后者则是标准库。
两个函数在分配空间时都是分配在堆中,实现结果也有细微差别。如malloc分配的实际空间可能比你指定的多些
相关文章推荐
- 2014-03-14周五工作日志:检查指定目录是否存在的函数MakeSureDirectoryPathExists
- 【小平工作日志】mybatis深入理解(一)之 # 与 $ 区别以及mybatis 对 sql 预编译
- malloc,ralloc,calloc工作原理及区别
- 2014-04-30工作日志:初始化与格式化的区别
- 【工作日志】【asp】【06】rs.bof与 rs.eof区别
- HeapAlloc与malloc的区别
- Windows系统上的VirtualAlloc, HeapAlloc和malloc,new的区别
- 工作积累之malloc与new的区别
- group by pgsql 与mysql 的区别 (2011.02.18工作日志)
- malloc与heapAlloc的区别
- malloc,ralloc,calloc工作原理及其区别
- HeapAlloc与malloc的区别
- 2014-03-31工作日志:多字节与双字节字符集, LPSTR、LPCSTR、LPTSTR、LPCTSTR、LPWSTR及LPCWSTR的意义及区别
- malloc,ralloc,calloc工作原理及其区别
- 2011-5-27周五项目实施日志
- 今天正式开始在CSDN中记录工作日志,呵呵,在这里安家了。
- 第二十七周工作日志
- 用malloc引发的段错误---malloc 与 calloc的区别
- malloc/free与new/delete的区别
- 关于工作日志