CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
【经验总结】不能实施并行处理的情况 浅谈并行编程中的任务分解模式
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  VC/MFC >  基础类

heapalloc,globalalloc,virtualalloc,new的异同?

楼主sjy()2001-02-02 23:00:00 在 VC/MFC / 基础类 提问

以上几个函数都可用于分配内存,但好象一般用GLOBALALLOC   ,NEW,malloc就可以解决很多问题了,那为什么还有virtualalloc及heapalloc呢   ,所以想对这几个函数多了解一下,哪位大侠知道应该在什么场合使用不同的函数呢? 问题点数:40、回复次数:7Top

1 楼Robert2001(Robert2001)回复于 2001-02-03 10:54:00 得分 0

..Top

2 楼zzh()回复于 2001-02-04 10:26:00 得分 0

其实没有必要使用这么多,使得程序过于难读,使用new或GlobalAlloc这两个函数就可以满足须求了。HeapAlloc是从堆中分配内存,所分配的内存不需要使用GlobalLock来锁住,而使用GlobalAlloc所分配的内存,如果在使用过程当中,分使用GlobalLock来锁住,在使用完成后再GlobalUnlockTop

3 楼stzhou(阿毛)回复于 2001-02-04 12:14:00 得分 0

不同意zzh()的说法,内存的合理分配关系到应用程序的效率问题,不同的场合,不同的条件下对内存的分配有着特定的要求,绝不仅仅是new或GlobalAlloc这两个函数可以解决了的。  
  另外GlobalAlloc(Win32下等于LocalAlloc)的得以保存更多是考虑到了Win32与Win16的兼容,这样的内存空间在Free之前会一直处于调拨状态。Top

4 楼edyang(化石)回复于 2001-02-04 20:44:00 得分 0

Heap   管理函数主要用于管理较小的内存块(一般情况下认为是   <   4MB)。GlobalAlloc   一类的函数好像是   16bit   API   的遗留物,WIN32   内存管理中部分全局和局部   Heap,只有一种属于进程的   heap。VirtualAlloc   一类的函数是虚拟内存管理的。Top

5 楼sjy()回复于 2001-02-04 22:22:00 得分 0

刚好这两天Top

6 楼sjy()回复于 2001-02-04 22:33:00 得分 0

我有空查了查书,1。说HEALPALLOC的用法是:先用CREATEHEAP建立一私有堆,(这个堆将会区别于已有程序的缺省堆,而NEW,MALLOC,都是从程序的缺省堆中分配,这是不同的,但使用这个私有堆而不用缺洎堆有什么好处我就不清楚了。2,VIRTUALALLOC是用于管理虚存,可能分配较大块的内存时比较好用,在需要时可以提交它将它调至物理内存进行操作。但GLOBALALLOC好象也是在GLOBALLOCK时才将内存锁定在物理内存,好象差别也不大。我提这个问题是想加深对内存分配的了解,欢迎各位大侠进行讨论,Top

7 楼bugn(unknown& whoami)回复于 2001-02-04 23:22:00 得分 40

对于不同场合用不同函数的问题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"里是详细讲解过的。Top

相关问题

  • 请问GlobalAlloc和HeapAlloc有什么区别?
  • Socket4和Socket5有何异同?
  • .open 和 exec的异同!!
  • asp & asp.net 有何异同?
  • == 和 equals() 有什么异同?
  • InstallShield与wise Installer异同?
  • winform 和 webform的异同
  • Vector和ArrayList的异同
  • OnCommand和OnCmdMsg有什么异同?
  • MFC 与 KFC 的区别与异同点

关键词

  • win32
  • 函数
  • 内存
  • globalalloc
  • heapalloc
  • 分配
  • 的crt
  • 使用
  • malloc
  • 不同

得分解答快速导航

  • 帖主:sjy
  • bugn

相关链接

  • Visual C++类图书
  • Visual C++类源码下载

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
提问
惹火投票。。火热进行中...
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
北京创新乐知广告有限公司 版权所有, 京 ICP 证 070598 号
世纪乐知(北京)网络技术有限公司 提供技术支持
CSDN网站24小时值班电话:13552009689
Copyright © 2000-2009, CSDN.NET, All Rights Reserved
GongshangLogo