[問題] 你所不知道的C語言:函式呼叫篇

看板C_and_CPP (C/C++)作者時間1年前 (2023/03/12 11:46), 編輯推噓5(5010)
留言15則, 6人參與, 1年前最新討論串1/2 (看更多)
https://reurl.cc/ZXWRl3 在「從遞迴觀察函式呼叫」這個part,我的理解如下 用static int count去統計有多少個stack frame (或是遞迴執行多少次) 在func內增加local variable後,因為stack frame內要多塞4 byte的 y ,所以stack frame變大,count變小 目前為止還看得懂 但是我不懂下面這段為什麼135168要乘以4 ``` 60000Hex - 3f000Hex = 21000Hex = 135168Dec 135168 * 4 = 540672 這跟前面的數字很接近! ``` 135168不是代表stack大小嗎? 乘以4是代表什麼意思 看完jserv的影片後還是不懂,麻煩各位解惑,謝謝 -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 203.204.54.161 (臺灣) ※ 文章網址: https://www.ptt.cc/bbs/C_and_CPP/M.1678592802.A.02B.html

03/12 12:13, 1年前 , 1F
這裡的 4 應該是指每個 int 會占用 4 bytes
03/12 12:13, 1F

03/12 13:25, 1年前 , 2F
我的理解是524092是進到stack的次數,135168是整個stack
03/12 13:25, 2F

03/12 13:25, 1年前 , 3F
的大小(單位是byte),但把整個stack大小乘以4的目的是什
03/12 13:25, 3F

03/12 13:25, 1年前 , 4F
麼?stack的大小不是固定的嗎?
03/12 13:25, 4F

03/12 17:37, 1年前 , 5F
可能寫錯了吧 我覺得寫174697*3=524091接近比較合理
03/12 17:37, 5F

03/12 17:38, 1年前 , 6F
畢竟第三個版本的func的stack frame是第一個版本的
03/12 17:38, 6F

03/12 17:38, 1年前 , 7F
三倍大
03/12 17:38, 7F

03/12 17:40, 1年前 , 8F
而且這裡的135168是pid=1程序的stack size 跟跑迴圈
03/12 17:40, 8F

03/12 17:40, 1年前 , 9F
的程序的stack size沒什麼關係
03/12 17:40, 9F

03/12 17:41, 1年前 , 10F
修正一下用詞 是遞迴不是迴圈
03/12 17:41, 10F

03/12 19:58, 1年前 , 11F
同意樓上, 可能原作者不知道所以把它們隨意關連在一起了
03/12 19:58, 11F

03/12 21:17, 1年前 , 12F
這樣搞還不如用ollydbg去實際看看程式怎麼跑
03/12 21:17, 12F

03/13 00:44, 1年前 , 13F
想算stack size要在assembly下看才有意義,不然編譯器可能
03/13 00:44, 13F

03/13 00:44, 1年前 , 14F
都最佳化掉了,另外大部份abi下stack pointer會有不同的al
03/13 00:44, 14F

03/13 00:44, 1年前 , 15F
ignment要求,實際上會佔得比local variable多一點
03/13 00:44, 15F
文章代碼(AID): #1a3KiY0h (C_and_CPP)
文章代碼(AID): #1a3KiY0h (C_and_CPP)