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

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

Links booklink

Contact Us: admin [ a t ] ucptt.com