C C 變數在記憶體中的分布

2021-05-31 22:10:42 字數 877 閱讀 2630

c/c++變數在記憶體中的分布在筆試時經常考到,雖然簡單,但也容易忘記,因此在這作個總結,以加深印象。

先寫乙個測試程式:

view plain

copy to clipboard

print?

#include 

#include 

int g_i = 100;  

int g_j = 200;  

int g_k, g_h;  

int main()    

執行結果(release版本,xp系統)如下:

可以看出:

1.      變數在記憶體位址的分布為:堆-棧-**區-全域性靜態-常量資料

2.      同一區域的各變數按宣告的順序在記憶體的中依次由低到高分配空間(只有未賦值的全域性變數是個例外)。

3.      全域性變數和靜態變數如果不賦值,預設為0。 棧中的變數如果不賦值,則是乙個隨機的資料。

4.      編譯器會認為全域性變數和靜態變數是等同的,已初始化的全域性變數和靜態變數分配在一起,未初始化的全域性變數和靜態變數分配在另一起。

上面程式全在乙個主函式中,下面增加函式呼叫,看看函式的引數和函式中變數會分配在什麼地方。

程式如下:

view plain

copy to clipboard

print?

#include 

void fun(int i)  

int main()    

執行結果如下:

可以看出,主函式中棧的位址都要高於子函式中引數及棧位址,證明了棧的伸展方向是由高位址向低位址擴充套件的。主函式和子函式中靜態資料的位址也是相鄰的,說明程式會將已初始化的全域性變數和表態變數分配在一起,未初始化的全域性變數和表態變數分配在另一起。

c c 變數在記憶體中的分布

c c 變數在記憶體中的分布在筆試時經常考到,雖然簡單,但也容易忘記,因此在這作個總結,以加深印象。先寫乙個測試程式 執行結果 release版本 如下 可以看出 1.變數在記憶體位址的分布為 堆 棧 區 全域性靜態 常量資料 2.同一區域的各變數按宣告的順序在記憶體的中依次由低到高分配空間 只有未...

C C 變數在記憶體中的分布

c c 變數在記憶體中的分布在筆試時經常考到,雖然簡單,但也容易忘記,因此在這作個總結,以加深印象。先寫乙個測試程式 view plain copy to clipboard print?include include int g i 100 int g j 200 int g k,g h int ...

C C 變數在記憶體中的分布

c c 變數在記憶體中的分布在筆試時經常考到,雖然簡單,但也容易忘記,因此在這作個總結,以加深印象。先寫乙個測試程式 include include intg i 100 intg j 200 intg k,g h intmain 執行結果 release版本,xp系統 如下 可以看出 1.變數在記...