如何在Unix中查找虚拟内存块大小

时间:2013-10-21 22:11:06

标签: c++ virtual-memory

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

1 个答案:

答案 0 :(得分:0)

假设您在正常配置中使用glibc,我实际上希望您的内存分配一次增长4KB。但是,你用来查看尺寸的工具可能不够精细,足以向你展示如此小的差异?

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

当然,如果你做x = malloc(4096);,实际的分配将是大于4KB的少量字节,因为malloc需要一些额外的数据来跟踪分配本身(例如什么当前分配的大小,以前分配的大小)。整个开销是至少2 * sizeof(size_t)+ 2 * sizeof(某些指针)= 32位系统上的16字节,64位系统上32字节。它可能不止于此。