我知道在这个问题Why the int type takes up 8 bytes in BSS section but 4 bytes in DATA section中提到的.bss的默认对齐方式是8个字节的对齐方式
所以在这个程序中:
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请告诉我为什么?
发布于 2020-01-02 20:38:33
.bss具有未初始化的全局变量的大小。这些将在程序加载时被初始化为零。
如果您将全局变量初始化为非零的值,则它将不再位于.bss中,而将位于.data段中。数据段包含所有初始化的全局变量(及其初始值)。
因此,.bss的大小减小,如果.data增加,则减小大小。
发布于 2020-01-02 19:51:02
这可能是因为bss的初始化保留了基本的8个字节,引入了全零,这样内存管理器就不会读取垃圾,但当我们最终创建一个适合4个字节的变量时,bss会减少(以占用较少的内存)。
https://stackoverflow.com/questions/59562193
复制相似问题