【发布时间】:2019-12-23 21:56:36
【问题描述】:
我将一个静态变量初始化为0,但是当我看到汇编代码时,我发现只有内存分配给了该变量。值未赋值
而当我将静态变量初始化为其他数字时,可以发现内存被赋值了。
我猜GCC是否认为在我们使用内存之前应该由OS将内存初始化为0。
我使用的 GCC 选项是“gcc -m32 -fno-stack-protector -c -o”
当我将静态变量初始化为0时,c代码和汇编代码:
static int temp_front=0;
.local temp_front.1909
.comm temp_front.1909,4,4
当我将它初始化为其他数字时,代码是:
static int temp_front=1;
.align 4
.type temp_front.1909, @object
.size temp_front.1909, 4
temp_front.1909:
.long 1
【问题讨论】:
-
全局变量默认初始化为零。编译器无事可做。
-
@PaulOgilvie 如果没有人这样做,就什么也做不了。充其量,您的“解释”缺乏信息。
-
@Deduplicator, OK:未初始化的全局变量放在 .BSS 段中。加载程序为 .BSS 段分配内存并将其初始化为零。
-
加载程序或引导程序归零 .bss。这个问题清楚地表明了 .data 与 .bss 的关系,这是正确的。