C变量存储空间、作用域、生命周期

变量分类:

1.全局变量

2.全局静态变量

3.局部变量

4.局部静态变量

5.寄存器变量 register

变量类型 作用域 存储空间 生命周期
全局变量 整个程序可见 静态区(./data./bss) 整个程序运行期间
全局静态变量 整个程序可见 静态区(./data./bss) 整个程序运行期间
局部变量 函数内部 函数执行期间
局部静态变量 整个程序可见 静态区(./data./bss) 整个程序运行期间
寄存器变量 函数内部 寄存器 函数执行期间
int a = 0;    // 全局变量
char *p1;    // 全局变量
static int x = 10;    // 全局静态变量

void func(void) {
    int b;     // 局部变量
    char s[] = "123";   // 局部变量 “123”为常量
    char *p2;     // 局部变量
    char *p3 = "hello world";    // 局部变量  "helo world"为常量
    static int c = 0;    // 局部变量
    register int i = 0;  // 局部变量
    p1 = (char *)malloc(128);    // p1指向堆上内存
    p2 = (char *)malloc(256);    // p2指向堆上内存
    free(p1);    // 释放内存
    free(p2);    // 释放内存
}


int main() {
    func();
    printf("hello world\n");
    return 0;
}
变量或常量 存储空间 作用域 生命周期
a 静态区(.data)

整个工程

extern int a

整个程序结束
p1 静态区(.bss),指向的内存在堆上

整个工程

extern char *p1

整个程序结束,指向的内存需要free释放
x 静态区(.data) 当前文件 整个程序结束
b func函数 func函数结束
s func函数 func函数结束
p2 栈,指向的内存在堆上 func函数 func函数结束,指向的内存需要free释放
p3 func函数 func函数结束
c 静态区(.data) func函数 整个程序结束
i 可能是寄存器或栈 func函数 func函数结束
"123", "hello world" 静态区(.rdata)   整个程序结束

 

posted @ 2020-09-12 11:04  Flag{Just_For_Fun}  阅读(139)  评论(0)    收藏  举报