编译时:
// external definitions
int value1 = 0;
static int value2 = 0;
gcc 编译器生成以下程序集:
.globl value1
.bss
.align 4
.type value1, @object
.size value1, 4
value1:
.zero 4
.local value2
.comm value2,4,4
但是,当我将变量初始化为非零值时,例如:
// external definitions
int value1 = 1;
static int value2 = 1;
gcc 编译器生成以下内容:
.globl value1
.data
.align 4
.type value1, @object
.size value1, 4
value1:
.long 1
.align 4
.type value2, @object
.size value2, 4
value2:
.long 1
我的问题是:
- 为什么在第一种情况下,值是在 bss 段中分配的,而在第二种情况下是在数据段中分配的。
- 为什么 value2 变量在第一种情况下被定义为 .local 和 .comm ,而在第二种情况下没有。