0

我有一个在循环中分配 4096 字节(4KB)的程序,在第 4 次迭代之后,我可以看到虚拟内存大小增加了 16 KB。所以这意味着块大小是 16 KB。找到这个的unix命令是什么?我可以使用 getconf PAGE_SIZE 来获取 4KB 的页面大小,但需要找到块大小。

4

1 回答 1

0

假设您glibc在正常配置中使用,我实际上希望您的内存分配一次增长 4KB。但是,也许您用来查看大小的工具不够精细,无法向您显示如此小的差异?

显然,可能是您的 glibc 的配置与我得到的源不同,但它确实分配(通过sbrk,这反过来调用系统调用brk)您要求的块大小,四舍五入为 4KB(确切来源:size = (size + pagemask) & ~pagemask;,很快紧随其后if (size > 0) brk = (char*)(MORECORE(size));

当然,如果这样做x = malloc(4096);,实际分配的字节数会大于 4KB,因为malloc需要一些额外的数据来跟踪分配本身(例如当前分配的大小,之前分配的大小) . 在 32 位系统上,整个开销至少为 2 * sizeof(size_t) + 2 * sizeof(some pointer) = 16 字节,在 64 位系统上为 32 字节。它可能不止于此。

于 2013-10-21T23:06:35.180 回答