- 相关推荐
C语言变量存储布局
C语言变量是怎么储存的大家了解吗?下面一起去了解一下C语言变量存储布局是怎么样的吧,希望对大家有帮助!
1.正文段(.text):机器指令部分,是只读的,防止意外的修改;
2.初始化数据段(.data):保存程序中的全局变量且已被赋初值或在函数中被static修饰的且已被赋初值的变量;
3.未初始化数据段(.bss):保存程序中的全局变量且未被赋初值或在函数中被static修饰的且未被赋初值的变量,这些变量由内核赋初值0;
4.堆:通常由程序员进行申请,最后进行释放;
5.栈:存放函数中的临时变量,函数调用时给变量分配内存,函数释放时释放内存。
下面以实际的例子来分析变量存储空间:
#include
const int A = 10;
int a = 20;
static int b = 30;
int c;
int main(void)
{
static int a = 40;
char b[] = "forward";
register int c = 50;
printf("Hello World %d ", c);
return 0;
}
1.全局变量A用const修饰,表示A是只读的,不可修改,它的地址位于.rodata段;注意,像A这种const变量在定义时必须初始化。因为只有初始化时才有机会给它一个值,一旦定义之后就不能再改写了,也就是不能再赋值了;
2.程序中的字符串字面值"Helloworld%d "分配在.rodata段的末尾,字符串字面值是只读的,相当于在全局作用域定义了一个const数组:
const char helloworld[] = {'H', 'e', 'l', 'l', 'o', ' ', 'w','o', 'r', 'l', 'd', ' ', '%', 'd', ' ', '