看板 C_and_CPP 關於我們 聯絡資訊
開發平台(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