c与样中变量通常分为:
- 自动局部变量
- 静态局部变量
- 全局变量
- 静态全局变量
在分析各变量存储位置之前,说一下c程序的布局吧! 先上个图
- Text Segment:存放正文,为机器执行指令
- Initialized Data Segment( Ds):初始话数据存放
- Uninitialized Data Segmen( .bss):未初始化数据存放
- Stack:自动变量存放及函数调用信息存放
- Heap:动态存储,存放程序运行时所动态分配的数据
说回变量存放位置分析
- 未初始化的静态变量(全局或局部)和全局变量存放在.bbs数据段
- 初始化的静态变量(全局或局部)和全局变量存放在Ds数据段
注意: Initialized Data Segment( Ds)又可更细化的分为只读区和可读写区,
例如:全局变量 char *p="shi" 和 char p[]="shi";
char *p="shi"中, 指针变量将存放在Ds数据段的读写区,“shi”字符串将存放在Ds数据段的只读区
char p[]="shi"中, p数组将占用4个字节,存放在Ds数据段的可读写区 - 自动局部变量将存放在stack区中,能够自动释放