【发布时间】:2015-06-19 22:04:40
【问题描述】:
在未初始化的数据段中,内核将未初始化的变量初始化为0。
但是如果我们直接使用一个未初始化的变量(例如 int sum; 而不是 int sum=0; )并在程序中使用它,比如 sum=sum+n(n 是任意数字),sum 将取任何垃圾值.
那么,如果 sum 已经被内核初始化为 0,为什么还要取任何垃圾值呢?
【问题讨论】:
标签: memory-management heap-memory
在未初始化的数据段中,内核将未初始化的变量初始化为0。
但是如果我们直接使用一个未初始化的变量(例如 int sum; 而不是 int sum=0; )并在程序中使用它,比如 sum=sum+n(n 是任意数字),sum 将取任何垃圾值.
那么,如果 sum 已经被内核初始化为 0,为什么还要取任何垃圾值呢?
【问题讨论】:
标签: memory-management heap-memory
您似乎在询问编译时初始化和运行时初始化之间的区别。在以下 C 代码中:
int i;
int main() {
int j;
return i + j;
}
i 是一个全局范围的变量,因此默认初始化为零,这是通过将其包含在程序的数据段中来实现的。这将作为初始值块写入二进制文件,或者将向加载器描述块的大小,并且加载器将在可执行文件启动时用零填充它。
j,然而,是一个局部变量,将存在于寄存器或堆栈中。 C 和 C++ 选择不默认初始化这些值,因此如果您在没有初始化它们的情况下访问它们,您将看到恰好在它们的寄存器/堆栈位置中的值。
【讨论】: