2011-12-25 45 views
2
#include <unistd.h> 
(size_t) sysconf(_SC_PAGESIZE); 

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

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

+0

操作系统或'malloc'开销? 'malloc'每个分配都有开销。 – u0b34a0f6ae 2011-12-25 23:39:34

回答

5

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

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

+0

好的。元数据不存储在分配的页面中。这是我需要知道的。其他人建议元数据在分配的页面中添加前缀。 – HaltingState 2012-02-19 05:33:49

+0

当使用'malloc'时,元数据确实是分配数据的前缀。但是,如果分配了4096个字节,则可以使用从指针开始的4096个字节。 – ugoren 2012-02-19 08:17:39

+0

这与您的答案的第二行相矛盾,您声明元数据不存储在malloc返回的块中,而是存储在其他页面中。 – HaltingState 2012-02-19 22:47:08