您的位置:首页 > 其它

HeapAlloc和GlobalAlloc以及VirtualAlloc三者之间的关系

2011-08-19 11:37 363 查看
VirtualAlloc一次分配1PAGE以上的RAM. 每次分配都是PAGE的整数倍.

你不会想为了分配1个BYTE的空间而浪费剩下的4095字节. OK. 你可以自己写算法,多分

配几PAGE. 然后每次分配少量数据时就从那几PAGE中划分出来. 什么? 你笨到不会写分

配算法? 好巴 KERNEL32给你一个解决办法. 用HeapAlloc/GlobalAlloc分配RAM. 这样,

KERNEL32帮你完成分配动作, 并且尽量在减少用于跟踪空闲区域和已占用区域消耗的数

据结构.

很久以前也有个产品叫做WINDOWS. 那时候的WINDOWS是16BIT的. 地址空间有些紧俏.

有钱不够. 还需要粮票肉票才能拿到. 你已经调用GlobalAlloc和已经出钱的性质一样.

GlobalAlloc还不够. 有时候需要GlocalLock才能确定你的东西确实可以拿到手.不然你

的指针会非法. 被充公. 你的应用会被杀头. 扯远了. 后来OS进化了. 觉得可以取消粮

票肉票. 但是你必须用新版钞票才行. 那就是HeapAlloc. 只要市场上的RAM数量没问题

. 你的HeapAlloc没问题. 那就总能拿到东西. 但是, 你总不能说有了2000版的钞票,

那80版的马上作废啊. 那GlobalAlloc也只好继续流通下去. 至于可以流通到什么时候.

没人知道.

globalalloc和malloc的区别和各在什末情况下使用

这两个函数的功能完全不同。

GlobalAlloc在Win16中就已经有了,这个函数返回一个句柄,通过这个句柄,两个进程可以共享一块内存,DDE和剪贴板就是通过这个函数交换数据的;malloc是一个库函数,这个函数的功能,是通过内部调用了VirtualAlloc完成的,并且分配的内存不能共享。

一般来说,涉及到DDE和剪贴版的内存操作使用GlobalAlloc,大多数程序内部的内存操作,使用malloc

如果要使用大块的共享内存,建议使用File Mapping

MSDN上面这样说: LocalAlloc:速度比其他内存管理函数慢,功能不多,推荐使用HeapAlloc HeapAlloc:缺点是内存块小,不能超过4MB,推荐使用VirtualAlloc VirtualAlloc:内存块可以超过4MB 其实编程序时用得很少,你要是用C++的话,用new字符足够了,到底是虚拟分配还是分页分配操作系统和编译器自己搞定了,折腾上面的分配是在太麻烦。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: