作者:
Kuba4ma (哦吼)
2023-03-12 11:46:40https://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的大小不是固定的嗎?
可能寫錯了吧 我覺得寫174697*3=524091接近比較合理畢竟第三個版本的func的stack frame是第一個版本的三倍大而且這裡的135168是pid=1程序的stack size 跟跑迴圈的程序的stack size沒什麼關係修正一下用詞 是遞迴不是迴圈
作者:
LPH66 (-6.2598534e+18f)
2023-03-12 19:58:00同意樓上, 可能原作者不知道所以把它們隨意關連在一起了
作者:
seanwu (海恩)
2023-03-13 00:44:00想算stack size要在assembly下看才有意義,不然編譯器可能都最佳化掉了,另外大部份abi下stack pointer會有不同的alignment要求,實際上會佔得比local variable多一點