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

How to find virtual memory block size in Unix

本文关键字:虚拟内存 查找 Unix      更新时间:2023-10-16

>我有一个程序在一个循环中分配 4096 字节 (4KB),在第 4 次迭代后,我可以看到虚拟内存大小增加了 16 KB。 因此,这意味着块大小为 16 KB。什么是 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需要一些额外的数据来跟踪分配本身(例如当前分配的大小,以前的分配是什么大小)。在 32 位系统上,整个开销至少为 2 * sizeof(size_t) + 2 * sizeof(某些指针)= 16 字节,在 64 位系统上至少为 32 字节。可能不止于此。