1. 程式人生 > >記憶體分配粒度

記憶體分配粒度

使用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平臺下的程式中,更細的區別暫時不知。