yuv*_*esh 52 c variables global local
可能重复:
为什么全局变量和静态变量初始化为默认值?
看代码,
#include <stdio.h>
int a;
int main(void)
{
int i;
printf("%d %d\n", a, i);
}
Run Code Online (Sandbox Code Playgroud)
产量
0 8683508
Run Code Online (Sandbox Code Playgroud)
这里'a'用'0'初始化,但'i'用'垃圾值'初始化.为什么?
K-b*_*llo 110
因为这是它的方式,根据C标准.原因是效率:
静态变量在编译时初始化,因为它们的地址是已知的并且是固定的.将它们初始化为0
不会产生运行时成本.
自动变量可以针对不同的调用具有不同的地址,并且每次调用函数时都必须在运行时初始化,从而产生可能不需要的运行时成本.如果确实需要初始化,请提出请求.
Rag*_*ddy 41
global
static
当初始化时,变量存储在数据段(DS)中,当未初始化时,变量存储在符号(BSS)的块中.
这些变量具有固定的内存位置,并且在编译时分配内存.
因此global
,static
变量具有'0'
默认值.
而auto
变量存储在堆栈上,而他们没有一个固定的内存位置.
内存auto
在运行时分配给变量,但不在编译时分配.因此auto
变量的默认值为垃圾.
Jon*_*ler 16
您选择了简单变量,但请考虑:
void matrix_manipulation(void)
{
int matrix1[100][100];
int matrix2[100][100];
int matrix3[100][100];
/* code to read values for matrix1 from a file */
/* code to read values for matrix2 from a file */
/* code to multiply matrix1 by matrix2 storing the result in matrix3 */
/* code to use matrix3 somehow */
}
Run Code Online (Sandbox Code Playgroud)
如果系统将数组初始化为0,则会浪费工作量; 初始化被函数的其余部分覆盖.C尽可能避免隐藏成本.
归档时间: |
|
查看次数: |
66680 次 |
最近记录: |