为什么二进制文件的大小不会随着静态数据的大小而增加?

问题描述 投票:0回答:1

当我用

gcc -O0
,

编译以下 C 代码时
#include <stdlib.h>
#include <stdio.h>

char bytes[1000*1000*1000];

int main(void) {
    for (int i = 0; i < 1000*1000; i++)
        bytes[i] = (char) i;
    printf("%c\n", bytes[56789]);
    return EXIT_SUCCESS;
}

二进制文件只有 16kB。 我分配的1GB去哪儿了?它不在堆上,因为我不调用 malloc,也不在堆栈上,因为它太多了。

c memory static
1个回答
1
投票

由于该区域是用零初始化的,因此在某些系统上不需要位于二进制文件中。加载程序将简单地告诉操作系统内存空间的某些部分将被标记为已分配,并且操作系统将提供必要的清零页面。

© www.soinside.com 2019 - 2024. All rights reserved.