【问题标题】:How much of a malloced memory page is usable?有多少分配的内存页可用?
【发布时间】:2011-12-25 14:12:57
【问题描述】:
#include <unistd.h>
(size_t) sysconf(_SC_PAGESIZE);

sysconf(_SC_PAGESIZE) 告诉我,我的操作系统和处理器上的内存页面大小为 4096。内存页的 4096 字节中,有多少可以用于数据,多少是开销/元数据?

我有一个应用程序,我通过将经常访问的指针打包到同一个缓存块中来优化缓存局部性,并且需要知道整个内存页面是否可用,或者我是否会通过填充整个内存页面来跨越内存页面边界.

【问题讨论】:

  • 操作系统或malloc 开销? malloc 每次分配都有开销。

标签: c++ c performance optimization malloc


【解决方案1】:

没有元数据。 4096 字节可用。
操作系统确实将元数据存储在某处,但它在其他页面上,这不应该打扰您。

但是,您是否可以访问内存并不取决于页面大小。如果分配了 100 个字节,则只能访问 100 个字节。如果分配了4096,就可以访问4096。

【讨论】:

  • 好的。元数据不存储在分配的页面中。这就是我需要知道的。其他人建议在分配的页面中添加元数据前缀。
  • 当使用malloc 时,元数据确实是分配数据的前缀。但是,如果你分配了 4096 字节,你可以从你得到的指针开始使用 4096 字节。
  • 这与您的答案的第二行相矛盾,您在其中声明元数据未存储在 malloc 返回的块中,而是存储在其他页面中。
  • malloc 返回的指针与该指针加上大小之间没有元数据。我确实写了“在其他页面上”,这确实不准确。我会编辑它。
猜你喜欢
  • 2014-03-02
  • 2020-03-12
  • 1970-01-01
  • 2011-07-27
  • 1970-01-01
  • 2012-08-28
  • 1970-01-01
  • 2011-08-27
  • 2011-03-03
相关资源
最近更新 更多