在本例中,未初始化数据部分 (bss) 中将存储什么?
int a;
int arr[20];
int main(){}
我将尝试表达我的建议:а它将被初始化为零,因为它具有静态存储持续时间并且会落入data段中。但是数组呢,它会在哪里呢?
在本例中,未初始化数据部分 (bss) 中将存储什么?
int a;
int arr[20];
int main(){}
我将尝试表达我的建议:а它将被初始化为零,因为它具有静态存储持续时间并且会落入data段中。但是数组呢,它会在哪里呢?
/*乏味的警告: */
严格来说,C++ 没有提及数据部分 - 这些是特定于平台和链接器级别的概念,因此:a)与平台隔离的问题没有意义b)编译器可以自由做所有认为合适的事情 sv 。
所有具有静态生命周期 (and
tread_local) 且未提供显式常量初始化 ( constant-initialized ) 的变量最初初始化为零 ( zero-initialized )。同时,对于数据的复合数据类型(结构体/类、联合体或数组),它们的每一个成员也初始化为零(对于联合体,这个表述稍有不同,但这并不会改变本质)。通常编译器将所有空对象放在
.bss. 这是否是由显式初始化为零引起的并不重要。所以在上面的例子中,很可能两个对象 (a和arr) 都在 .bss 部分。不难检查: