const、static型資料在記憶體中如何存儲?(變量存放位置)

static int val_a = 1 ; // 初始化的靜态變量
int val_b = 2 ; // 全局變量
const int val_c = 3 ; // const 全局變量
static int val_d ; // 未初始化的靜态變量
int val_e ; // 未初始化的全局變量
int main()
{
static int val_f = 5; // 初始化的局部靜态變量
static int val_g; //未初始化局部靜态變量
int val_h = 6; //初始化局部變量
int val_i; //未初始化局部變量
const int val_j = 7; //const局部變量
return 0;
}
①static無論是全局變量還是局部變量都存儲在全局/靜态區域,在編譯期就為其配置設定記憶體,在程式結束時釋放,例如:val_a、val_d、val_h、val_i。
②const全局變量存儲在隻讀資料段,編譯期最初将其儲存在符号表中,第一次使用時為其配置設定記憶體,在程式結束時釋放,例如:val_c;const局部變量存儲在棧中,代碼塊結束時釋放,例如:val_j。
③全局變量存儲在全局/靜态區域,在編譯期為其配置設定記憶體,在程式結束時釋放,例如:val_b、val_e。
④局部變量存儲在棧中,代碼塊結束時釋放,例如:val_h、val_i。
注:當全局變量和靜态局部變量未賦初值時,系統自動置為0。