1

未初始化的静态变量总是在 BSS 中分配。而 .bss 部分是静态的,因为内存是在编译时分配的。根据许多书籍,可执行文件中“只有初始化为非零值的变量才会占用空间”。程序加载到内存后,未初始化的静态变量仍然是.bss。

**当一个函数初始化它时会发生什么?** 它会被转移到其他地区吗?

4

3 回答 3

2

报价的其余部分:

“在可执行文件中,只有初始化为非零值的变量才会占用空间。”

IE当可执行文件加载到内存时,分配所需的空间

于 2015-05-01T15:33:30.490 回答
1

.bss 不占用可执行文件中的空间。当程序启动时,.bss 被分配并填充为 0。所有未初始化的对象都位于那里。因此,当您初始化变量时,内存已分配。

于 2015-05-01T15:30:06.930 回答
1

初始化时,内存被分配给“未初始化的静态变量”,这被移动到 .data 部分。

代码文件:

int a,b,c;

int main()
{

a=1;
b=2;
c=3;

scanf("%d",a);
}

执行:

 # size a.out   
 text      data     bss     dec     hex filename
 1318       284      16    1618     652 a.out

# size core.18521 
text      data      bss     dec     hex   filename
28672    180224       0  208896   33000   core.18521 (core file invoked as ./a.out)
于 2016-03-04T15:21:56.653 回答