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