c - 为什么用 1 和 0 初始化数组会使可执行文件如此之大?

标签 c gcc

如果我编译以下程序 int array[5000]={0}; int main(){} ,输出文件大小比我做的要小得多int array[5000]={1}; int main(){} , 将第一个元素初始化为 1,其余元素初始化为 0,那么为什么文件大小会有如此大的差异呢?

最佳答案

您的 array是一个静态全局变量。
如果声明为仅用零初始化,则可以将其分配在一个特殊的内存段中,该内存段在进程启动期间创建并用零初始化。
OTOH 如果它被声明为包含任何非零值,它的初始值必须存储在程序的文件中,以便操作系统在内存中准备运行程序时,它可以分配适当的数据段并用定义的数据填充它初始值。
https://en.wikipedia.org/wiki/Data_segment用于 DATA 和 BSS 段。

关于c - 为什么用 1 和 0 初始化数组会使可执行文件如此之大?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/69034904/

相关文章:

c - C语言中只读取一行txt

gcc - 与GCC组装会导致关于.data的奇怪的重定位错误

c++ - 是否可以在基于 Linux 的系统上使用 gcc 或 g++ 进行静态编译?

c++ - 模板中的从属名称和非从属名称

c - 将二进制文件移动到目录之外时出现段错误

linux - gcc --whole-archive --no-whole-archive : Dynamic Library Integrity

c - 在结构体中创建数组时的"Type variable-sized object may not be initialized"(C语言)

c - 使用 fread 通过 UDP 发送数据的问题

C - 从 char[] 创建 const char*

c - 在c中使用gstreamer链接音频和视频bin