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

C++ 如何在Unix中查找虚拟内存块大小,c++,virtual-memory,C++,Virtual Memory,我有一个在循环中分配4096字节(4KB)的程序,在第四次迭代后,我可以看到虚拟内存大小增加了16KB。这意味着块大小是16KB。什么是unix命令来查找此文件?我可以使用getconf PAGE_SIZE获得4KB的页面大小,但需要找到块大小。假设您在正常配置中使用的是glibc,我实际上希望您的内存分配一次增加4KB。但是,也许您用来查看大小的工具不够细粒度,无法显示这么小的差异 显然,您的glibc的配置可能与我得到的源代码不同,但它确实分配(通过sbrk,它反过来调用系统调用brk)您请

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

假设您在正常配置中使用的是
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(some pointer)=32位系统上的16字节,64位系统上的32字节。可能不止这些。

这看起来像是分配器库的详细信息。内存为4kB,但分配器一次可能会获得更大的内存块。