在程序運(yùn)行時(shí),一個(gè)函數(shù)占用一段連續(xù)的內(nèi)存。當(dāng)調(diào)用一個(gè)函數(shù)時(shí),實(shí)際上是跳轉(zhuǎn)到函數(shù)的入口地址,執(zhí)行函數(shù)體的代碼,完成后返回。函數(shù)指針指向一個(gè)函數(shù)的入口地址,也就是函數(shù)存儲(chǔ)空間的首地址。
舟曲網(wǎng)站制作公司哪家好,找創(chuàng)新互聯(lián)!從網(wǎng)頁設(shè)計(jì)、網(wǎng)站建設(shè)、微信開發(fā)、APP開發(fā)、成都響應(yīng)式網(wǎng)站建設(shè)等網(wǎng)站項(xiàng)目制作,到程序開發(fā),運(yùn)營(yíng)維護(hù)。創(chuàng)新互聯(lián)成立于2013年到現(xiàn)在10年的時(shí)間,我們擁有了豐富的建站經(jīng)驗(yàn)和運(yùn)維經(jīng)驗(yàn),來保證我們的工作的順利進(jìn)行。專注于網(wǎng)站建設(shè)就選創(chuàng)新互聯(lián)。
一般C語言程序運(yùn)行時(shí)默認(rèn)1M的棧空間,以int類型的參數(shù)來看,1M=1024KB=1024*1024字節(jié),32位系統(tǒng)中int類型占4個(gè)字節(jié),所以理論上一個(gè)函數(shù)最多有262144個(gè)int類型的參數(shù)。
再說的多一點(diǎn),一個(gè)進(jìn)程(運(yùn)行的程序)可分為若干段:代碼段、數(shù)據(jù)段、堆棧段等,其中函數(shù)所操作的空間(也就是局部變量的空間)就位于堆棧段,所謂函數(shù)分配內(nèi)存大小,實(shí)際就是堆棧段指針的變化而已。
C語言使用的內(nèi)存是虛擬內(nèi)存。按照功能的不同在C語言中又將虛擬內(nèi)存為分三類:棧區(qū)、堆區(qū)、靜態(tài)數(shù)據(jù)區(qū),不管是單一變量還是數(shù)組,其內(nèi)存分配都是這樣分的。
如何在一維存儲(chǔ)器中存放二維數(shù)組,可有兩種方式:一種是按行排列, 即放完一行之后順次放入第二行。另一種是按列排列, 即放完一列之后再順次放入第二列。在C語言中,二維數(shù)組是按行排列的。
棧上分配 在函數(shù)執(zhí)行時(shí),函數(shù)內(nèi)的局部變量的存儲(chǔ)單元在棧上創(chuàng)建,函數(shù)執(zhí)行結(jié)束時(shí)這些存儲(chǔ)單元自動(dòng)釋放。堆上分配 堆分配(又稱動(dòng)態(tài)內(nèi)存分配)。
一個(gè)由c/C++編譯的程序占用的內(nèi)存分為以下幾個(gè)部分棧區(qū)(stack) 由編譯器自動(dòng)分配釋放 ,存放函數(shù)的參數(shù)值,局部變量的值等。其操作方式類似于數(shù)據(jù)結(jié)構(gòu)中的棧。
基本上C程序的元素存儲(chǔ)在內(nèi)存的時(shí)候有3種分配策略:靜態(tài)分配 如果一個(gè)變量聲明為全局變量或者是函數(shù)的靜態(tài)變量,這個(gè)變量的存儲(chǔ)將使用靜態(tài)分配方式。靜態(tài)分配的內(nèi)存一般會(huì)被編譯器放在數(shù)據(jù)段或代碼段來存儲(chǔ),具體取決于實(shí)現(xiàn)。
一般而言,有兩種內(nèi)存分配的方式。在棧上分配。特點(diǎn)是當(dāng)變量離開其作用域時(shí),其內(nèi)存即釋放了,例如局部變量、函數(shù)參數(shù)等都是在棧上分配的。在堆上分配。
realloc(p,sizeof(int)*n)/ 給一個(gè)已經(jīng)分配了地址的指針重新分配空間,參數(shù)p為原有的空間地址*/ 數(shù)組的定義。
C語言中內(nèi)存為分三類:棧區(qū)、堆區(qū)、靜態(tài)數(shù)據(jù)區(qū)。局部變量在棧上分配,函數(shù)調(diào)用前的棧指針,要和函數(shù)返回后的棧指針一樣,否則就會(huì)出錯(cuò)。
C語言使用的內(nèi)存是虛擬內(nèi)存。按照功能的不同在C語言中又將虛擬內(nèi)存為分三類:棧區(qū)、堆區(qū)、靜態(tài)數(shù)據(jù)區(qū),不管是單一變量還是數(shù)組,其內(nèi)存分配都是這樣分的。
調(diào)用形式: free(void*ptr); 功能:釋放ptr所指向的一塊內(nèi)存空間,ptr 是一個(gè)任意類型的指針變量,它指向被釋放區(qū)域的首地址。
文章標(biāo)題:c語言函數(shù)的內(nèi)存布局 c語言 內(nèi)部函數(shù)
URL網(wǎng)址:http://chinadenli.net/article48/dejiiep.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站維護(hù)、網(wǎng)站排名、定制開發(fā)、面包屑導(dǎo)航、服務(wù)器托管、網(wǎng)站內(nèi)鏈
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)