c - 为什么在添加初始化静态变量时 .bss 大小会减小?

标签 c gcc memory-management

我知道 .bss 的默认对齐方式对于 GCC 是 8 字节,正如这个问题中提到的 Why the int type takes up 8 bytes in BSS section but 4 bytes in DATA section

所以对于这个程序:

int main(){
    
    return 0;
}

我有这样的东西:

   text    data     bss     dec     hex filename
   1418     544       8    1970     7b2 test

当我添加一个带有初始化的静态变量以增加 .data 时(确实如此):

static int var = 255;

int main(){
    
    return 0;
}

我看到 .bss 的大小也减少了 4 个字节:

  text     data     bss     dec     hex filename
  1418      548       4    1970     7b2 test

请告诉我为什么?

最佳答案

.bss 具有未初始化全局变量的大小。这些将在程序加载时初始化为零。

如果您将全局变量初始化为非零值,它将不再位于 .bss 中,而是位于 .data 段中。数据段包含所有已初始化的全局变量(及其初始值)。

因此,.bss 的大小减小,而 .data 的大小增加。

关于c - 为什么在添加初始化静态变量时 .bss 大小会减小?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59562193/

相关文章:

c - 在 OS X 上,你如何找出当前的内存保护级别?

c - 即使进程未刷新,cmd.exe 如何显示标准输出?

c - "Dereferencing pointer to incomplete type"在列表中使用结构时 - C

c - 查找文本文件中的字符数、单词数和行数

c - =+(等于加号)在 C 语言中是什么意思?

gcc - 我需要将 CFLAGS 显式传递给 gcc 吗?

c++ - 如何强制编译器显示隐式构造函数

C 程序不再在 Ubuntu 中编译

objective-c - 如何在整个应用程序生命周期中获取有关初始化的每个 UIImage 的通知?

linux - Linux 中无法解释的 +28Gb 内存过度使用