2 ly601579033 ly601579033 于 2014.12.16 16:33 提问

关于linux内存 数据段和bss段的疑惑???

数据段和bss段分别存放 已初始化/未初始化 的全局变量和静态变量。

那么,假如bss段的全局变量和静态变量在代码执行中被初始化了,那么会不会被转移到
数据段存储呢???

1个回答

u011767611
u011767611   2014.12.16 17:52
已采纳

首先我觉得你所说的在执行中被初始化的说法是不正确的,应该叫赋值。
接下来我们看一段代码:

#include <stdio.h>
int a;
int b=10;
int c=11;
int main(void)
{
    int d;
    int e=12;
    return 0;
}

用gcc编译后,(在linux下用命令size,得到如下结果)

text       data     bss     dec        hex      filename
1115     560          8    1683     693     t10

继续看下面修改后的代码:

#include <stdio.h>
int a;
int a1; 
int a2; 
int a3; 
int b=10;
int c=11;
int main(void)
{
    int d;
    int e=12;
    return 0;
}

再用size命令,你会看到:

text       data     bss     dec     hex filename
1115        560      24    1699     6a3 t10

通过这些数据,你应该很容看出bss的大小变化,
而你所说的会不会转移的问题,我想说,程序被编译后,
就只会加载代内存中等待执行,不会转移的。
希望对你有用!

u014487915
u014487915 我想知道下bss的东西不是会在程序执行的时候初始化为0么? 那么bss段的大小还有什么用处?
大约 3 年之前 回复
u011767611
u011767611 不客气,一起学习!
大约 3 年之前 回复
ly601579033
ly601579033 多谢啊~~我也刚刚写了代码验证,也是用的size指令和%p输出。
大约 3 年之前 回复
Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!