来自Windows核心编程 – 第十四章

主要是通过一些Windwos函数来了解与系统内存管理和进程中虚拟地址空间相关的信息。

14.1 系统信息

操作系统中有许多值是由系统所运行的主机决定的,如页面大小和分配粒度等。

我们应该在进程初始化的时候取得这些值,然后再使用它们。

GetSystemInfo 函数用来取的与主机相关的值:

启动时,系统会确定这些值应该是多少。对一个给定的系统来说,由于这些值始终都是不变的,因此在任何一个进程中只需调用该函数一次就足够了。

使用时需要传入一个 SYSTEM_INFO 结构的地址。

以下四个成员是与内存有关的,分别是:

dwPageSize CPU页面大小,x86和x64都是4096Byte

lpMinimumApplicationAddress 进程可用地址的最小内存地址

lpMaximumApplicationAddress 进程私有空间中最大内存地址

dwAllocationGranularity 分配粒度,Windows平台上都是 65535

除此之外还有部分与内存无关的成员,列举如下:

wReserved 为今后拓展保留。

dwNumberOfProcess 机器中CPU数量

dwActiveProcessorMask 一个位掩码,表示哪些CPU处于活动状态

wProcessorArchitecture 处理器结构体系

wProcessorLevel 进一步细分处理器结构

wProcessorRevision 再进一步细分…

 

14.2 虚拟内存状态

Windows下的 GlobalMemoryStatus函数 可以用来取得当前内存状态的动态信息。

传入一个 MEMORYSTATUS 结构的地址做参数。

如果预计应用程序会装在4GB及以上内存机器上运行,或者页交换文件大小大于4GB,那么就应该调用新的函数如下:

注意下传入的数据结构也不一样了…

 

14.3 NUMA机器中的内存管理 – 略

 

14.4 确定地址空间的状态

Windows提供了一个函数,可以用来查询与地址空间中内存地址有关的特定信息。

这个函数是:

另外还提供了一个 VirtualQueryEx ,运行一个进程查看另一个进程的内存信息。这里不列举。

 

恩,大致就这些,并没有详细列举。

【Windows核心编程】探索虚拟内存
Tagged on:
0 0 投票数
Article Rating
订阅评论
提醒

0 评论
内联反馈
查看所有评论