C語言變數儲存佈局
C語言變數是怎麼儲存的大家瞭解嗎?下面一起去了解一下C語言變數儲存佈局是怎麼樣的吧,希望對大家有幫助!
1.正文段():機器指令部分,是隻讀的,防止意外的修改;
2.初始化資料段():儲存程式中的全域性變數且已被賦初值或在函式中被static修飾的且已被賦初值的變數;
3.未初始化資料段():儲存程式中的全域性變數且未被賦初值或在函式中被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是隻讀的`,不可修改,它的地址位於ta段;注意,像A這種const變數在定義時必須初始化。因為只有初始化時才有機會給它一個值,一旦定義之後就不能再改寫了,也就是不能再賦值了;
2.程式中的字串字面值"Helloworld%d"分配在ta段的末尾,字串字面值是隻讀的,相當於在全域性作用域定義了一個const陣列:
const char helloworld[] = {'H', 'e', 'l', 'l', 'o', ' ', 'w','o', 'r', 'l', 'd', ' ', '%', 'd', '', '