記憶體分配粒度
阿新 • • 發佈:2018-12-03
使用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平臺下的程式中,更細的區別暫時不知。