dwPageSize和dwAllocationGranularity之间的关系

Relationship between dwPageSize and dwAllocationGranularity

本文关键字:关系 之间 dwAllocationGranularity dwPageSize      更新时间:2023-10-16

我正在阅读谷歌的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的情况?

免责声明:这个答案不是基于任何文档,而是基于我对这些常量的解释。

我假设报告的页面大小是正确的。我假设分配粒度指的是操作系统内存分配接口的粒度。

有两种情况需要考虑:

  • 分配粒度大于页面大小。分配一个页面大小的内存块会导致实际更大的资源分配,因此应该避免。

  • 分配粒度小于页面大小。分配分配粒度大小的内存块仍然会导致分配/映射整个页面,因此应该避免。

基本上这两种情况都会导致操作系统分配比请求更多的内存。通过使用最大值可以避免这种情况,这样(用户空间)分配代码就可以(相对)确定其实际内存使用情况。