亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定

遞歸中函數內存分配問題

求解一個問題:老師說遞歸調用自身的時候是給函數分配的獨立內存單元,而不是調用的之前的函數,但是我在gdb查看函數地址卻發現如下現象:

#0? fun (a=1) at main.c:10

#1? 0x0000000100000eb7 in fun (a=2) at main.c:8

#2? 0x0000000100000eb7 in fun (a=3) at main.c:8

#3? 0x0000000100000eb7 in fun (a=4) at main.c:8

#4? 0x0000000100000eb7 in fun (a=5) at main.c:8

#5? 0x0000000100000f1b in main () at main.c:18

每次遞歸調用的時候,函數的地址都是一樣的,這個怎么解釋比較合理呢?謝謝。

正在回答

2 回答

函數的代碼都是一樣的,所以地址一樣,在棧里的位置是不一樣的

0 回復 有任何疑惑可以回復我~
#1

無牙仔 提問者

你好,謝謝你的回答。不過我還有一點不明白,這個地址到底是什么地址,如果代碼在棧里的位置不一樣,那為什么地址會是一樣的呢,應該是棧里的每段空間都有獨立的地址吧?謝謝。
2016-03-26 回復 有任何疑惑可以回復我~

函數在代碼段里,一個函數一個入口地址

棧上的是調用的函數順序,以及參數和本地變量,代碼不在棧里。

你可以看看PE的格式,就知道了

1 回復 有任何疑惑可以回復我~

舉報

0/150
提交
取消
Linux C語言結構體
  • 參與學習       118436    人
  • 解答問題       166    個

C語言的深入,幫助小伙伴們進一步的理解C語言,趕緊看過來

進入課程

遞歸中函數內存分配問題

我要回答 關注問題
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號