/3GB是一个全局开关
/3GB开关只会对那些标记为/LARGEADDRESSAWARE的应用程序产生影响。
为了保持兼容性,只有那些明确表明它们能处理超过2GB的虚拟地址空间的程序,才会获得更大的虚拟地址空间。而那些没有这个标记的,只会得到2GB的虚拟地址空间,而位于2GB和3GB之间的空间将不会被使用。
为什么呢?
因为有太多程序假设用户模式虚拟地址的高位总是清晰明确的,这几乎成了一种固有的模式。在MSDN上有一些文档专门讨论了一些程序做这样的假设的方法。你可能做出的一个这样的假设是:使用公式 (a + b) / 2 来获取两个指针之间的中点。如我之前的一篇文章中所讨论的,这会导致整数溢出并会导致指针指向一个未知的位置。类似的,你也不能简单的将一个不是你开发的应用程序标记为/LARGEADDRESSAWARE,然后以为就这样完事儿了。你必须和程序的开发者沟通确定:他们的代码中没有对2GB地址空间有任何的假设。(程序开发者没有将他们的程序标记为3GB兼容这一事实,正是在强烈地表明程序中没有此类验证。如果有,他们会标记程序为/LARGEADDRESSAWARE!)
将一个程序标记为/LARGEADDRESSAWARE,实际上是在对操作系统表明:”请给予此程序那额外的1GB的用户模式地址空间的使用权。” 结果是,这1GB的额外地址空间可能会成为一些内存分配相关函数的返回值。如果你在内存管理器的分配优先项中设置了”Top down”,你可以指示内存管理器首先分配地址空间中的高位地址,从而迫使程序比平时更快地处理这些地址。
这在/3GB配置中测试你的程序时非常方便,因为它强制比正常情况更快地使用高位的内存地址。
课后练习
让我们看看下面的程序,它暗藏一个Bug,看看你能否找出来。
如果一时半会有点摸不着头脑,请想想咱们今天这篇文章的主题。
最后
Raymond Chen的《The Old New Thing》是我非常喜欢的博客之一,里面有很多关于Windows的小知识,对于广大Windows平台开发者来说,确实十分有帮助。
本文来自:《Myth: The /3GB switch expands the user-mode address space of all programs》
最近我写了个东西
正如你们所知道的,拓扑梅尔智慧办公平台(Topomel Box)是一款绿色软件,主要面向经常使用电脑的朋友。它提供了各种提升办公效率的小功能,同时操作上尽可能地简单方便。
我想:你值得拥有。
相关推荐
- 再来说说经理和程序员的区别
- Posted on 05月15日
- 为什么资源管理器里不显示文件夹大小?
- Posted on 04月22日
- 用户自定义消息及层次划分
- Posted on 11月05日
- 键盘快捷键二三事
- Posted on 01月20日
评论已关闭。