使用GetSystemInfo函数可以带回一个SYSTEM_INFO结构体,这个结构体中就包含内存分配粒度(这个结构体还包含CPU数量)。
内存分配粒度:就是一次分配内存的最小值;在表示堆的结构体中就是以分配粒度为基本单位来表示堆块大小;类似于磁盘管理的基本单位是簇,一个簇又是2的N次方个扇区。
如下代码:
#include <stdio.h>
#include <Windows.h>
int main()
{
SYSTEM_INFO l_SystemInfo;
GetSystemInfo(&l_SystemInfo);
return 0;
}
分别在64位Windows10和32位XP虚拟机中测试结果,下图:
CPU数量分别是6,2
65536字节=64*1024字节=64KB
内存分配粒度在MapViewOfFile函数中有涉及到:映射的文件偏移地址必须是内存分配粒度的整数倍(测试偏移0处也算整数倍),如果说分配的内存大小粒度和偏移地址相关完全说不通。
还有一个GetNativeSystemInfo函数,和GetSystemInfo功能一样都是带回一个SYSTEM_INFO结构体,具体区别是:专门运行在WOW64平台下的程序中,更细的区别暂时不知。