我正在閱讀Google的TCMalloc源代碼(Windows移植)。dwPageSize和dwAllocationGranularity之間的關係
int getpagesize()
{
static int pagesize = 0;
if (pagesize == 0)
{
SYSTEM_INFO system_info;
GetSystemInfo(&system_info);
pagesize = std::max(system_info.dwPageSize, system_info.dwAllocationGranularity);
}
return pagesize;
}
,你可以本身爲代碼段以上pagesize
(即分配的單位)作爲dwPageSize和dwAllocationGranularity之間的最大計算。 我的意思是知道這兩種價值之間的關係:是否有必要按照這裏上面解釋的方式來計算價值?是否有任何情況下dwPageSize可能比dwAllocationGranularity大?
無關的註釋 - 使用jemalloc,它在各方面都優於tcmalloc。 – rustyx
就我所見,分配粒度小於頁面的分配粒度並不是很明智,但據我所知,它還沒有被正式排除。據推測,谷歌在這裏只是謹小慎微。 –
寫這個的程序員不明白「頁面大小」是什麼意思。沒有關係,除了粒度必須始終是頁面大小的整數倍並且永遠不會變小。粒度是針對地址空間碎片的簡單對策。它永遠是64KB。它不*保證分配中的所有頁面具有相同的保護屬性,請參見[本文](http://stackoverflow.com/a/19466079/17034)。 –