作者godman362 (卯)
看板C_and_CPP
標題[問題] label後宣告變數
時間Tue Aug 9 11:52:43 2011
開發平台(Platform): (Ex: VC++, GCC, Linux, ...)
Linux, GCC
問題(Question):
請教先進關於goto label的問題
若是在label底下宣告變數,而goto情況相當頻繁的時候
程式的實際產生memory的情況為何?
例子:
void func(void):
begin:
if (some condition) {
......
......
goto recovery;
}
else {
......
......
}
return 0;
recovery:
int tmp_value;
tmp_value = .....
........
........
goto begin;
想請教的是
綠色部份的Variable宣告
這個部份在不斷的goto情況下,memory的用量會是怎樣呢?
還是說這個部份會在compile的時候被拉到function的前面?
請各位先進指點一下,謝謝
--
▄▄
▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄
▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄
▄▄▄▄▄▄▄
▄▄▄▄▄▄▄▄▄▄▄▄▄
▄
▄▄▄▄▄▄▄▄
▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄
▄▄▄▄▄▄▄▄▄▄
▄▄
▄▄▄▄
▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄
▄▄▄▄▄▄
▄▄▄▄▄▄▄▄▄▄▄▄▄
▄▄▄▄▄▄▄▄▄▄▄▄▄▄
▄▄▄▄▄▄▄▄▄▄▄
▄▄▄▄
▄▄▄▄▄▄▄▄▄▄
▄▄▄
▄▄▄▄
▄▄▄▄▄▄▄▄▄
▄▄
▄▄▄▄▄
▄▄▄▄▄▄▄▄▄▄▄▄▄▄
▄▄
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 140.123.105.242
※ 編輯: godman362 來自: 140.123.105.242 (08/09 11:54)
推 purpose:每次進入 func 時,都會劃一段記憶體給此函數用,其中的 08/09 12:01
→ purpose:4 Bytes 固定給 tmp_value 用,goto 幾次都還是用那一塊 08/09 12:02
→ purpose:當然前提是 goto 只能在函數內跳,不能跨函數,這不是ASM 08/09 12:03
→ godman362:不能跨函數這點我明白,那個要用setjunp處理 08/09 12:24
→ godman362:謝謝p大的答覆,這樣我明白了 08/09 12:24
→ james732:其實可以藉由組合語言去研究這些行為 XD 08/09 12:28
推 purpose:如果 goto 可以跨到別的函數去,那就會造成直接用別的函數 08/09 12:29
→ purpose:內的變數,這是錯誤的行為,因為開頭劃分區域的指令沒跑到 08/09 12:30
→ angleevil:不會組語 08/09 15:35
→ firejox:是setjmp... 08/09 15:57
→ xatier:setjmp() longjmp() 搭配使用囉 08/10 01:18