比如如下程序代码片段
int a = 0;
char *p1;
static int x = 10;
int main(void)
{
int b = 0;
char s1[] = "123";
char *p2;
char *s2 = "123";
static int c =0;
p1 = (char *)malloc(128);
p2 = (char *)malloc(256);
free(p1);
free(p2);
return 0;
}
变量类型 | 存储空间 | 作用范围 | 生命周期 |
---|---|---|---|
a 全局初始化变量 | .data | 整个工程 | 程序运行周期 |
p1 全局未初始化变量 | .bss 是0 | 整个工程 | 程序运行周期 |
x 全局静态变量 | .data | 当前文档(避免命名冲突) | 程序运行周期 |
b 局部变量 | 栈 | 函数内部 | 函数运行周期 |
s1 局部变量 | 栈 | 函数内部 | 函数运行周期 |
p2 局部变量 | 栈 | 函数内部 | 函数运行周期 |
s2 局部变量 | 栈 | 函数内部 | 函数运行周期 |
c 静态局部变量 | .data | 函数内部 | 程序运行周期 |
静态区
.data:全局初始化的变量
.bss:全局未初始化变量
.rdata:全局只读
全局变量同一个文件中先定义先初始化,不同不确定