[问题] 你所不知道的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