在程序運(yùn)行時(shí),一個(gè)函數(shù)占用一段連續(xù)的內(nèi)存。當(dāng)調(diào)用一個(gè)函數(shù)時(shí),實(shí)際上是跳轉(zhuǎn)到函數(shù)的入口地址,執(zhí)行函數(shù)體的代碼,完成后返回。
網(wǎng)站建設(shè)哪家好,找創(chuàng)新互聯(lián)!專注于網(wǎng)頁(yè)設(shè)計(jì)、網(wǎng)站建設(shè)、微信開(kāi)發(fā)、小程序制作、集團(tuán)企業(yè)網(wǎng)站建設(shè)等服務(wù)項(xiàng)目。為回饋新老客戶創(chuàng)新互聯(lián)還提供了龍游免費(fèi)建站歡迎大家使用!
函數(shù)指針指向一個(gè)函數(shù)的入口地址,也就是函數(shù)存儲(chǔ)空間的首地址。
在C語(yǔ)言中,數(shù)組名代表數(shù)組的首地址,同樣函數(shù)名代表了函數(shù)的首地址,因此在賦值時(shí),直接將函數(shù)指針指向函數(shù)名就行了。
因此函數(shù)指針調(diào)用vs直接調(diào)用,占用的存儲(chǔ)空間都是一樣的。相當(dāng)于數(shù)組指針和數(shù)組名的關(guān)系,指向的都是同一個(gè)數(shù)組。
局部變量存在函數(shù)體里面,比如轉(zhuǎn)換成8086匯編(示意):
func: 定義變量
push ax
pop ax
ret
main: call func
滿意請(qǐng)采納,謝謝!
ShowMenu是一個(gè)函數(shù)名,可以看到他的值是一個(gè)地址。
ShowMenu是對(duì)函數(shù)取地址,指向和ShowMenu同樣的地址。
可以看出,ShowMenu是占用一個(gè)字節(jié)的,而作為指針ShowMenu卻占用四個(gè)字節(jié)。
所以說(shuō),函數(shù)名占用空間的。
一個(gè)函數(shù)有一個(gè)最大的內(nèi)存空間限制
大概是int的10000
內(nèi)存空間和程序本身定義的變量有關(guān)
帶遞歸的程序內(nèi)存空間是
本身定義的變量*遞歸層數(shù)
遞歸層數(shù)(就是從搜索樹的高度)
看是否會(huì)被調(diào)用
如果沒(méi)有被調(diào)用
那么不會(huì)占內(nèi)存
否則會(huì)在代碼段占用內(nèi)存的。