感覺C點比較弱,可能和ASM比較有關系,但這裡人多,就發在這了:p
如題
小弟最近在寫一個簡單的C編譯器,但對於區域變數是如何放在堆疊上的有些迷惑
例如
int main()
{
int a = 111;
if(a)
int b = 222;
int c = 333;
return 0;
}
一開始我是想說,編譯器是在要使用時才把變數push到堆疊上的
像是遇到a = 111,就在堆疊上push一個111,然後只有if成立時才把222 push到堆疊上,
反之則跳過
可是看了好幾個組合語言的範例(x86 Arm),好像會先計算在這函數中所有可能會用到變
數大小然後一次性push到堆疊上
例如剛剛的C程式,如果if成立會有a、b、c三個int,不成立會有a、c兩個int
而看到的實作則是不管有沒有b都先分配空間給他
但以C來說,在if內宣告的變數,他的生命週期應該就只在if內,但如果以這樣的實作,
在if內的變數,只要知道他的記憶體位置,就算在if外也能存取(因為有事先分配空間,
而且沒有回收),不太理解為什麼要這麼做
有沒有相關資料是講這方面細節的,謝謝
(寫完後發現C點真的好少.....會不會被刪阿orz....)