看板 C_and_CPP 關於我們 聯絡資訊
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
FanFlyAway: 這裡的 4 應該是指每個 int 會占用 4 bytes 03/12 12:13
Kuba4ma: 我的理解是524092是進到stack的次數,135168是整個stack 03/12 13:25
Kuba4ma: 的大小(單位是byte),但把整個stack大小乘以4的目的是什 03/12 13:25
Kuba4ma: 麼?stack的大小不是固定的嗎? 03/12 13:25
KaryuuIssen: 可能寫錯了吧 我覺得寫174697*3=524091接近比較合理 03/12 17:37
KaryuuIssen: 畢竟第三個版本的func的stack frame是第一個版本的 03/12 17:38
KaryuuIssen: 三倍大 03/12 17:38
KaryuuIssen: 而且這裡的135168是pid=1程序的stack size 跟跑迴圈 03/12 17:40
KaryuuIssen: 的程序的stack size沒什麼關係 03/12 17:40
KaryuuIssen: 修正一下用詞 是遞迴不是迴圈 03/12 17:41
LPH66: 同意樓上, 可能原作者不知道所以把它們隨意關連在一起了 03/12 19:58
stupid0319: 這樣搞還不如用ollydbg去實際看看程式怎麼跑 03/12 21:17
seanwu: 想算stack size要在assembly下看才有意義,不然編譯器可能 03/13 00:44
seanwu: 都最佳化掉了,另外大部份abi下stack pointer會有不同的al 03/13 00:44
seanwu: ignment要求,實際上會佔得比local variable多一點 03/13 00:44