區域變數與陣列的記憶體安排
區域變數與動態分配存在於stack中,是由高位向低位記憶體成長
類似這樣
記憶體高位
-----
int a
int b
int c
.
.
.
-----
記憶體低位
而陣列存在於heap中,是由低位記憶體向高位成長,
類似這樣
記憶體高位
-----
.
.
.
arr[2]
arr[1]
arr[0]
-----
記憶體低位
以下是一段c程式,我們可以直接以gdb觀察它的記憶體安排
#include<stdio.h>
int main(){
int a=1;
int b=2;
int c=3;
int arr[3]={4,5,6};
}
然後是gdb顯示出來的記憶體安排
0xff............ff //高位址
0x00007fffffffdee0 //base register
0x00007fffffffdedc //變數a
0x00007fffffffded8 //變數b
0x00007fffffffded4 //變數c
0x00007fffffffded0 //arr[2]
0x00007fffffffdecc //arr[1]
0x00007fffffffdec8 //arr[0]
0x0000555555555129 //函數起點,64位元位址 我猜是code section(程式段)起點
0x00............00 //低位址
順帶一提,函數參數,區域變數放在stack中,
而動態分配與陣列放在heap中。