linux elf .bss 部分内存开销

linux elf .bss section memory cost

#include <string.h>
#include <stdio.h>
typedef struct {
    char a[1024];
} AA;

static AA a[102400];
int main(int argc, char **argv)
{
    getchar();
    memset(a, 0, sizeof(a)/2);
    getchar();
}

我想了解 elf .bss 的内存开销。以上是我的测试程序。当程序启动时,它使用很少的内存所以我认为静态AA a[102400] 没有映射到all.When 我按"Enter" 让它memset 数组的一半,消耗了50M 内存。这是否意味着 linux 内核支持动态映射 .bss 部分,所以我不需要关心未使用的 global/static 变量的内存浪费?

.bss 部分被写入时复制映射到零页。

如果你不写入它,它实际上不是你程序的 RSS(驻留集大小)的一部分,因为它总是可以从零页映射回来。

当你写入它的那一刻,内核需要将它重新映射到可写内存,而现在你实际上正在消耗那块内存。