我正在阅读Google的TCMalloc源代码(
Windows移植).
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?
最佳答案 免责声明:这个答案不是基于任何文档,而是基于我对这些常量的解释.
我假设正确报告了页面大小.我假设分配粒度是指OS内存分配接口的粒度.
有两种情况需要考虑:
>分配粒度大于页面大小.分配页面大小的内存块将导致实际上更大的资源分配,因此应该防止它.
>分配粒度小于页面大小.分配分配粒度大小的内存块仍将导致整个页面被分配/映射,因此应该防止它.
基本上两种情况都会导致操作系统分配比请求更多的内存.通过使用最大值,可以避免这种情况,使得(用户空间)分配代码可以(相对)确定其实际存储器使用.