dwPageSize和dwAllocationGranularity之间的关系
Relationship between dwPageSize and dwAllocationGranularity
我正在阅读谷歌的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的情况?
免责声明:这个答案不是基于任何文档,而是基于我对这些常量的解释。
我假设报告的页面大小是正确的。我假设分配粒度指的是操作系统内存分配接口的粒度。
有两种情况需要考虑:
-
分配粒度大于页面大小。分配一个页面大小的内存块会导致实际更大的资源分配,因此应该避免。
-
分配粒度小于页面大小。分配分配粒度大小的内存块仍然会导致分配/映射整个页面,因此应该避免。
基本上这两种情况都会导致操作系统分配比请求更多的内存。通过使用最大值可以避免这种情况,这样(用户空间)分配代码就可以(相对)确定其实际内存使用情况。
相关文章:
- this_thread::sleep_for和计时时钟之间的关系是否由C++11标准指定
- 我已经建立了递归关系,它找到了两个字符串之间最长的连续公共字符串,我怎么能跳过其中一个字符串中的一个字符
- 移动语义和深层/浅层复制之间有什么关系?
- #include < conio.h> 和 getch() 方法之间的关系是什么?
- 超市管理系统的类别之间应该是什么关系?
- 指针和程序性能之间有什么关系吗?
- node.h/node.cpp/nodelist.cpp之间的关系
- 运行线程和线程对象之间的关系
- 类型大小与其值范围之间的关系?
- 2个期货之间的依赖关系
- Qt:工作线程和 GUI 事件之间的关系
- 如何强制 qbs 产品与依赖关系之间的同步?
- 在头文件和 .cc 文件之间建立关系
- C 和Windows OS之间的关系
- 为什么赋值运算符和相等运算符之间没有 1:1 的关系?
- QComboBox 在 editTextChanged 和 currentIndexChanged 之间的关系
- 使用 .depends 指定 SUBDIRS 项目之间的依赖关系不起作用
- 各种初始化和构造之间的关系
- 变量之间的关系
- Objective-C源代码和clang -rewrite-objc C++代码之间有什么关系?