首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么在添加初始化的静态变量时.bss大小会减小?

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

Stack Overflow用户
提问于 2020-01-02 18:59:18
回答 2查看 326关注 0票数 3

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

所以在这个程序中:

代码语言:javascript
复制
int main(){

    return 0;
}

我有这样的东西:

代码语言:javascript
复制
   text    data     bss     dec     hex filename
   1418     544       8    1970     7b2 test

当我添加一个带有初始化的静态变量以增加.data时(它确实这样做了):

代码语言:javascript
复制
static int var = 255;

int main(){

    return 0;
}

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

代码语言:javascript
复制
  text     data     bss     dec     hex filename
  1418      548       4    1970     7b2 test

请告诉我为什么?

EN

回答 2

Stack Overflow用户

发布于 2020-01-02 20:38:33

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

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

因此,.bss的大小减小,如果.data增加,则减小大小。

票数 2
EN

Stack Overflow用户

发布于 2020-01-02 19:51:02

这可能是因为bss的初始化保留了基本的8个字节,引入了全零,这样内存管理器就不会读取垃圾,但当我们最终创建一个适合4个字节的变量时,bss会减少(以占用较少的内存)。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/59562193

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档