|
![]() | 作者: TomyChen [quest]
![]() |
登录 |
问题问得好,答得也妙! 呵呵.... 转自 M$ newsgroup 原文如下 HeapAlloc和GlobalAlloc以及VirtualAlloc三者之间的关系 它们之间有什么联系? 它们之间有什么不同? 它们之间在应用场合上有什么讲究? 谢谢大家踊跃回答.谢谢! 答: 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也只好继续流通下去. 至于可以流通到什么时候. 没人知道. |
地主 发表时间: 04-08-12 15:40 |
![]() | 回复: TecZm [teczm] ![]() |
登录 |
强啊!![]() |
B1层 发表时间: 04-08-12 17:41 |
![]() | 回复: Garu [syshunter] ![]() |
登录 |
up |
B2层 发表时间: 04-08-13 12:30 |
|
20CN网络安全小组版权所有
Copyright © 2000-2010 20CN Security Group. All Rights Reserved.
论坛程序编写:NetDemon
粤ICP备05087286号