heapalloc,globalalloc,virtualalloc,new的异同?

sjy 2001-02-02 11:00:00
以上几个函数都可用于分配内存,但好象一般用GLOBALALLOC ,NEW,malloc就可以解决很多问题了,那为什么还有virtualalloc及heapalloc呢 ,所以想对这几个函数多了解一下,哪位大侠知道应该在什么场合使用不同的函数呢?
...全文
528 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
stzhou 2001-02-04
  • 打赏
  • 举报
回复
不同意zzh()的说法,内存的合理分配关系到应用程序的效率问题,不同的场合,不同的条件下对内存的分配有着特定的要求,绝不仅仅是new或GlobalAlloc这两个函数可以解决了的。
另外GlobalAlloc(Win32下等于LocalAlloc)的得以保存更多是考虑到了Win32与Win16的兼容,这样的内存空间在Free之前会一直处于调拨状态。
bugn 2001-02-04
  • 打赏
  • 举报
回复
对于不同场合用不同函数的问题edyang说得不错。

对于GlobalAlloc我只知道有一种情况下要用就是CreateStreamOnHGlobal。另外CoTaskMemAlloc也是特定情况下非用不可的。

建议看看MSDN中有关文章,说得很明白的:

MSDN->Technical Articles->Windows Platform->Memory

to sjy:

> 而NEW,MALLOC,都是从程序的缺省堆中分配,
这句话有问题,虽然书上这样说过 :)
crt(malloc,new等)用的堆根据不同的crt实现有关,如果拿不准就去参考一下你用的crt的源代码。现在一般的CRT的实现都有自己独立的堆。GlobalAlloc/LocalAlloc/CoTaskMemAlloc/IMalloc都用的是缺省堆,但这些函数在特定场合又不能用HeapAlloc(GetProcessHeap(), ...)来代替。

至于为什么用私有堆,我记得Jeffey Richter的"Advanced Windows"里是详细讲解过的。
sjy 2001-02-04
  • 打赏
  • 举报
回复
我有空查了查书,1。说HEALPALLOC的用法是:先用CREATEHEAP建立一私有堆,(这个堆将会区别于已有程序的缺省堆,而NEW,MALLOC,都是从程序的缺省堆中分配,这是不同的,但使用这个私有堆而不用缺洎堆有什么好处我就不清楚了。2,VIRTUALALLOC是用于管理虚存,可能分配较大块的内存时比较好用,在需要时可以提交它将它调至物理内存进行操作。但GLOBALALLOC好象也是在GLOBALLOCK时才将内存锁定在物理内存,好象差别也不大。我提这个问题是想加深对内存分配的了解,欢迎各位大侠进行讨论,
zzh 2001-02-04
  • 打赏
  • 举报
回复
其实没有必要使用这么多,使得程序过于难读,使用new或GlobalAlloc这两个函数就可以满足须求了。HeapAlloc是从堆中分配内存,所分配的内存不需要使用GlobalLock来锁住,而使用GlobalAlloc所分配的内存,如果在使用过程当中,分使用GlobalLock来锁住,在使用完成后再GlobalUnlock
sjy 2001-02-04
  • 打赏
  • 举报
回复
刚好这两天
Edward 2001-02-04
  • 打赏
  • 举报
回复
Heap 管理函数主要用于管理较小的内存块(一般情况下认为是 < 4MB)。GlobalAlloc 一类的函数好像是 16bit API 的遗留物,WIN32 内存管理中部分全局和局部 Heap,只有一种属于进程的 heap。VirtualAlloc 一类的函数是虚拟内存管理的。
Robert2001 2001-02-03
  • 打赏
  • 举报
回复
..

16,472

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Web++
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

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