各變數在記憶體中的位置

2021-07-23 21:29:34 字數 1030 閱讀 7158

在linux中寫乙個程式,裡面全域性變數,區域性變數,static,const,常數,陣列,輸出這些變數的位址(包括賦值的和沒有賦值的,各類資料型別)

#include

int a;

int b = 1;

int const c = 2;

static int d;

static int e = 3;

char src1[20];

char dest1 = ;

int main()

;printf("全域性變數,未初始化 %p\n",&a);

printf("全域性變數,初始化 %p\n",&b);

printf("常全域性變數 %p\n",&c);

printf("靜態全域性變數,未初始化 %p\n",&d);

printf("靜態全域性變數,初始化 %p\n",&e);

printf("全域性陣列,未初始化%p\n",src1);

printf("全域性陣列,初始化 %p\n",dest1);

printf("區域性變數,未初始化 %p\n",&f);

printf("區域性變數,初始化 %p\n",&g);

printf("常區域性變數 %p\n",&h);

printf("靜態區域性變數,未初始化 %p\n",&i);

printf("靜態區域性變數,初始化 %p\n",&j);

printf("區域性陣列,未初始化%p\n",src);

printf("區域性陣列,初始化 %p\n",dest);

}在linux中的執行結果截圖 

由結果可以看出 

常全域性變數在乙個區域 

區域性變數、陣列(包括已初始化和未初始化)、常區域性變數,在同乙個區域 

靜態區域性變數、常全域性變數、靜態全域性變數、全域性陣列(包括已初始化和未初始化)在一片區域,但是已經初始化的在未初始化的之前

程序的位址空間分配詳見c語言第三課

變數在記憶體的位置

1 首先,講下 堆 heap 和 棧 stack 的區別 乙個由 c c 編譯過的程式占用的記憶體分為一下幾個部分 1 棧區 stack 由編譯器自動分配釋放,存放函式的引數值,區域性變數的值等。這個棧的操作方式類似於資料結構中的棧。2 堆區 heap 一般由程式設計師分配釋放,若程式設計師不釋放,...

變數和值在記憶體中的儲存位置

變數和值在記憶體中的儲存位置 一 預備知識 程式的記憶體分配 乙個由c c 編譯的程式占用的記憶體分為以下幾個部分 1 棧區 stack 由編譯器自動分配釋放 存放函式的引數值,區域性變數的值等。其操作方式類似於資料結構中的棧。2 堆區 heap 一般由程式設計師分配釋放,若程式設計師不釋放,程式結...

變數和值在記憶體中的儲存位置

一 預備知識 程式的記憶體分配 乙個由c c 編譯的程式占用的記憶體分為以下幾個部分 1 棧區 stack 由編譯器自動分配釋放 存放函式的引數值,區域性變數的值等。其操作方式類似於資料結構中的棧。2 堆區 heap 一般由程式設計師分配釋放,若程式設計師不釋放,程式結束時可能由os 注意它與資料結...