下面举一个简单的例子来说明变量在各个段中的存储位置:
- #include <stdio.h>
- #include <stdlib.h>
- int data_var = 500;
- int bss_var0;
- int bss_var1 = 0;
- static int static_var;
- void my_function(void)
- {
- static int static_var1 = 0;
- int stack = 0;
- char *buffer;
- const int value = 1;
- buffer = malloc(10);
- }
上述变量的命名已经很清楚地表明了变量处于 RAM 中的哪一个段,datavar 是已经初始化的全局变量,存放在 RAM 的 data 区,bssvar0 和 bssvar1是未初始化和初始化为0的全局变量,他们都存放于 RAM 中的 bss段,由 static 修饰的staticvar 和 static_var1 都存放于 bss段,区别只在于两个变量的作用域不同。stack 是在函数内部定义的局部变量,其存放于 RAM 的栈区域,用 const 修饰的局部变量 value ,虽然他是只读的,但是它是存储于 RAM 中的栈中的,这里也说明一点,并不是所有用 const 修饰的变量都是存放于只读变量区的。buffer指针变量用 malloc 函数申请了 10 字节的内存空间,那这10字节的内存空间位于堆中。
|