[問題] label後宣告變數

看板C_and_CPP (C/C++)作者 (卯)時間14年前 (2011/08/09 11:52), 編輯推噓2(209)
留言11則, 6人參與, 最新討論串1/1
開發平台(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)

08/09 12:01, , 1F
每次進入 func 時,都會劃一段記憶體給此函數用,其中的
08/09 12:01, 1F

08/09 12:02, , 2F
4 Bytes 固定給 tmp_value 用,goto 幾次都還是用那一塊
08/09 12:02, 2F

08/09 12:03, , 3F
當然前提是 goto 只能在函數內跳,不能跨函數,這不是ASM
08/09 12:03, 3F

08/09 12:24, , 4F
不能跨函數這點我明白,那個要用setjunp處理
08/09 12:24, 4F

08/09 12:24, , 5F
謝謝p大的答覆,這樣我明白了
08/09 12:24, 5F

08/09 12:28, , 6F
其實可以藉由組合語言去研究這些行為 XD
08/09 12:28, 6F

08/09 12:29, , 7F
如果 goto 可以跨到別的函數去,那就會造成直接用別的函數
08/09 12:29, 7F

08/09 12:30, , 8F
內的變數,這是錯誤的行為,因為開頭劃分區域的指令沒跑到
08/09 12:30, 8F

08/09 15:35, , 9F
不會組語
08/09 15:35, 9F

08/09 15:57, , 10F
是setjmp...
08/09 15:57, 10F

08/10 01:18, , 11F
setjmp() longjmp() 搭配使用囉
08/10 01:18, 11F
文章代碼(AID): #1EGAyELe (C_and_CPP)
文章代碼(AID): #1EGAyELe (C_and_CPP)