C语言中未初始化数据的位置
我想知道未初始化的数据在修改后将存储在哪里 比如说, 所有初始化为代码中某个值的变量都将存储在.data部分 所有未初始化的变量将由编译器初始化为0,并存储在.bss节中 现在,假设我在代码中定义了一个由10个整数组成的数组。但是我没有指定这个数组的元素。因此,编译器将数组的所有整数初始化为0,并在.bss节中保留40个字节 在此之后,我将一些数据写入数组,它是否会修改.bss节本身中的数据C语言中未初始化数据的位置,c,C,我想知道未初始化的数据在修改后将存储在哪里 比如说, 所有初始化为代码中某个值的变量都将存储在.data部分 所有未初始化的变量将由编译器初始化为0,并存储在.bss节中 现在,假设我在代码中定义了一个由10个整数组成的数组。但是我没有指定这个数组的元素。因此,编译器将数组的所有整数初始化为0,并在.bss节中保留40个字节 在此之后,我将一些数据写入数组,它是否会修改.bss节本身中的数据 #include <stdio.h> #include <math.h> in
#include <stdio.h>
#include <math.h>
int main(int argc, char **argv)
{
int i;
/* 10 integers are initialized to 0 and stored in the .bss section */
unsigned int numbers[10];
/* write data to array */
for(i=0;i<10;i++)
{
numbers[i]=pow(2,i);
}
#包括
#包括
int main(int argc,字符**argv)
{
int i;
/*10个整数初始化为0并存储在.bss节中*/
无符号整数[10];
/*将数据写入阵列*/
对于(i=0;i你的假设
所有未初始化的变量将被初始化为0
“由编译器执行”
不正确。它未初始化,变量的内存已分配,但内容未初始化。您的假设是
所有未初始化的变量将被初始化为0
“由编译器执行”
不正确。它未初始化,分配了变量的内存,但内容未初始化。该.bss包含全局和静态未初始化变量。在您的示例中,数组将放置在堆栈上。该.bss包含全局和静态未初始化变量初始化变量。在您的示例中,数组将放置在堆栈上。在您的示例中,数组在堆栈上声明
因此,在您的示例中,堆栈
上声明了数组,而.bss中没有任何内容
因此,.bss
所有未初始化的变量将由编译器初始化为0,并存储在.bss节中
否,只有未初始化的全局变量和静态变量将被初始化为0
所有未初始化的变量将由编译器初始化为0,并存储在.bss节中
不,只有未初始化的全局变量和静态变量才会初始化为0。您在这里混淆了两件事。如果您谈论它.bss
或.data
部分,您谈论的是局部变量(如示例中)与全局/静态变量
本地变量(如示例中所示)在堆栈上分配。不涉及.bss/.data
。此数据将不斜体,并且具有随机值,不管堆栈上的值是什么
对于全局/静态未初始化变量,当程序启动时,它们被初始化为0。您在这里混淆了两件事。如果您谈论它.bss
或.data
部分,您谈论的是局部(如示例中)变量与全局/静态变量
本地变量(如示例中所示)在堆栈上分配。不涉及.bss/.data
。此数据将不斜体,并且具有随机值,不管堆栈上的值是什么
对于全局/静态未初始化变量,当程序启动时,它们被初始化为0。在前面的响应中已经说过,在您的示例中,数字数组将存储在堆栈上,而不是.bss节上,并且只有全局和静态变量将被初始化为0,如果它们是数值类型或对象为NULL
下面的示例显示了不同变量的存储位置
int abc = 1; ----> Initialized Read-Write Data
char *str; ----> BSS
const int i = 10; -----> Initialized Read-Only Data
main()
{
int ii,a=1,b=2,c; -----> Local Variables on Stack
char *ptr;
ptr = malloc(4); ------> Allocated Memory in Heap
c= a+b; ------> Text
}
还有一个很好的描述在前面的回答中已经说过,在您的示例中,数字数组将存储在堆栈上,而不是.bss部分,并且只有全局和静态变量将被初始化为0,如果它们是数值类型或对象为NULL
下面的示例显示了不同变量的存储位置
int abc = 1; ----> Initialized Read-Write Data
char *str; ----> BSS
const int i = 10; -----> Initialized Read-Only Data
main()
{
int ii,a=1,b=2,c; -----> Local Variables on Stack
char *ptr;
ptr = malloc(4); ------> Allocated Memory in Heap
c= a+b; ------> Text
}
还有一个很好的描述它将修改数组中的数据,无论数据当前存储在何处。此信息可能重复?此信息也可能有助于解决将哪些值分配给未分配数组的问题。它将修改数组中的数据,无论数据当前存储在何处。此信息可能重复还有一个问题是什么值分配给未分配的数组。谢谢。我知道了:)是的,局部变量将在堆栈上分配。谢谢。我知道了:)是的,局部变量将在堆栈上分配。