私は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;
}
することができますように、SE pagesize
上記のコードでは(すなわち、割り当ての単位である)dwPageSizeとdwAllocationGranularity間の最大として計算されます。 私が知っていることは、これらの2つの値の間の関係の種類です:ここでは逆さまに説明された方法で値を計算する必要がありますか?そして、dwPageSizeがdwAllocationGranularityよりも大きい可能性がある状況はありますか?
関連性のないメモ - jemallocを使用すると、すべての点でtcmallocより優れています。 – rustyx
割り振り粒度をページより小さくすることは、私が見る限りではあまり賢明ではありませんが、公式には除外されていないと言えます。おそらく、Googleはちょうどここで慎重である。 –
これを書いたプログラマは、 "ページサイズ"の意味を理解していません。粒度は常にページサイズの整数倍でなければならず、決して小さくすることはできません。細分性は、アドレス空間の断片化に対する簡単な対策です。それは永久に64KBでした。割り当て内のすべてのページが同じ保護属性を持つことは保証されていません。[this post](http://stackoverflow.com/a/19466079/17034)を参照してください。 –