虚拟分配粒度和页面大小

11

Win64平台上虚拟分配粒度和页面大小的典型值是什么?这对应于SYSTEM_INFO结构体中的dwAllocationGranularity和dwPageSize参数。

在Win32系统上,它们分别为64k和4k。

我需要知道这些信息,因为我已经为一个Win32应用程序设计了一个基于VirtualAlloc的自定义分配器,并想知道我的设计选择在Win64上是否仍然有效。我无法访问Win64系统。

提前致谢!


这些设计选择是依赖于特定的常量值,还是动态查询dwAllocationGranularity和dwPageSize?换句话说,您能分享更多上下文吗? - reuben
1
该代码查询数值。然而,我对其对应用程序的影响感到担忧。例如,如果粒度足够小,我可以为不同的模块分配专用地址范围。另一方面,如果它太大(几MB),这可能会耗尽地址空间,因此需要共享它们。 - fbonnet
1个回答

10

目前在Vista x64上,大小仍然是64k和4k。不确定是否会有变化,小页面大小正在对TLB高速缓存施加严重压力,这会导致为分配多个GB块的程序性能显著下降。我还看到了一些问题报告,即在程序执行的某个难以理解的时刻无法再分配大页。但现在这只是一个猜测。


1
我听说Itanium的页面大小是8k。无论如何,感谢您的回答! - fbonnet
是的,在IA64上有8K。你见过吗? - Hans Passant
1
Itanium - 它正在被英特尔淘汰。庆幸你从未不得不在上面工作过。我曾经在Windows XP代号“Whistler”时使用过它。那个机箱是英特尔的预生产机(后来换了几次“更好”的机器),搭载了早期版本的Visual Studio 7.0。慢得要命,噪音大得像一台吵闹的吸尘器一样整天放在你的桌子旁边。我在上面将一个Win32应用程序移植到Win64,有200万行C++代码。当我完成这部分工作并不再需要使用Itanium时,我感到非常高兴。 - Stephen Kellett

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接