作者Kuba4ma ()
看板C_and_CPP
标题[问题] 你所不知道的C语言:函式呼叫篇
时间Sun Mar 12 11:46:40 2023
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://webptt.com/cn.aspx?n=bbs/C_and_CPP/M.1678592802.A.02B.html
1F:推 FanFlyAway: 这里的 4 应该是指每个 int 会占用 4 bytes 03/12 12:13
2F:→ Kuba4ma: 我的理解是524092是进到stack的次数,135168是整个stack 03/12 13:25
3F:→ Kuba4ma: 的大小(单位是byte),但把整个stack大小乘以4的目的是什 03/12 13:25
4F:→ Kuba4ma: 麽?stack的大小不是固定的吗? 03/12 13:25
5F:推 KaryuuIssen: 可能写错了吧 我觉得写174697*3=524091接近比较合理 03/12 17:37
6F:→ KaryuuIssen: 毕竟第三个版本的func的stack frame是第一个版本的 03/12 17:38
7F:→ KaryuuIssen: 三倍大 03/12 17:38
8F:→ KaryuuIssen: 而且这里的135168是pid=1程序的stack size 跟跑回圈 03/12 17:40
9F:→ KaryuuIssen: 的程序的stack size没什麽关系 03/12 17:40
10F:→ KaryuuIssen: 修正一下用词 是递回不是回圈 03/12 17:41
11F:推 LPH66: 同意楼上, 可能原作者不知道所以把它们随意关连在一起了 03/12 19:58
12F:推 stupid0319: 这样搞还不如用ollydbg去实际看看程式怎麽跑 03/12 21:17
13F:推 seanwu: 想算stack size要在assembly下看才有意义,不然编译器可能 03/13 00:44
14F:→ seanwu: 都最佳化掉了,另外大部份abi下stack pointer会有不同的al 03/13 00:44
15F:→ seanwu: ignment要求,实际上会占得比local variable多一点 03/13 00:44