国产成人av人人爽人人澡-亚洲国产日韩欧美一区-好吊日视频这里只有精品-日本高清精品视频在线

您好,歡迎進(jìn)入深圳市穎特新科技有限公司官方網(wǎng)站!

您現(xiàn)在的位置:首頁 新聞資訊 >> 新聞頭條 >> C語言——內(nèi)存分配
新聞資訊
NEWS INFORMATION

C語言——內(nèi)存分配

發(fā)布時間:2019-05-22

“要想深入學(xué)習(xí)C語言,不可避免要去弄懂C語言的內(nèi)存分配,我也是最近才看了關(guān)于這一部分的內(nèi)容,看完后收獲很大,很多以前不是很明白的地方也變得清晰起來。”

01

虛擬內(nèi)存

我們要知道,在編程過程中,我們直接操作的內(nèi)存其實是虛擬內(nèi)存,使用的地址也是虛地址,但虛擬內(nèi)存更易于我們來理解程序的執(zhí)行過程。

虛擬內(nèi)存是計算機(jī)系統(tǒng)內(nèi)存管理的一種技術(shù)。它使得應(yīng)用程序認(rèn)為它擁有連續(xù)的可用的內(nèi)存(一個連續(xù)完整的地址空間),而實際上,它通常是被分隔成多個物理內(nèi)存碎片,還有部分暫時存儲在外部磁盤存儲器上,在需要時進(jìn)行數(shù)據(jù)交換。

上面是百度百科對虛擬內(nèi)存的定義。應(yīng)該是比較好理解的,不能理解也沒關(guān)系,不會影響你閱讀這篇文章的。下面,我們所提到的內(nèi)存,均為虛擬內(nèi)存。

02

內(nèi)存分配

首先,我們來看看內(nèi)存長啥樣。

 

 

對,就是這么一個簡陋的長條子。我們的程序就是在這么一段內(nèi)存里產(chǎn)生了各種各樣奇妙的結(jié)果。

最上面是高位地址,往下是低位地址。我們來一部分一部分地來看。

代碼區(qū)

顧名思義,你的代碼全部儲存在這里。程序執(zhí)行的時候,順序結(jié)構(gòu)只會執(zhí)行一次,如果是遞歸,或者調(diào)用函數(shù),則需要棧來實現(xiàn)。這一段區(qū)域還存儲著一些常量,比如字符串常量。

rodata區(qū)域

這一部分在圖上沒有,但確實很重要的一塊,這里存儲著常量,但是不是所有常量都存儲在這里。

全局初始化數(shù)據(jù)區(qū)/靜態(tài)數(shù)據(jù)區(qū)(Data Segment)

這一部分存儲著靜態(tài)變量和已經(jīng)初始化(非零)的全局變量,在這里存儲的數(shù)據(jù)都是已經(jīng)初始化過的。

未初始化數(shù)據(jù)區(qū)(BSS)

這一部分存儲著未初始化的全局變量和初始化為0的全局變量。

堆區(qū)

在程序中使用malloc和calloc分配的內(nèi)存便是從這里分配的。

棧區(qū)

這一部分存放函數(shù)的參數(shù)值、局部變量的值等。它類似于數(shù)據(jù)結(jié)構(gòu)中的棧。每當(dāng)一個函數(shù)被調(diào)用,該函數(shù)返回地址和一些關(guān)于調(diào)用的信息,比如某些寄存器的內(nèi)容,被存儲到棧區(qū)。然后這個被調(diào)用的函數(shù)再為它的自動變量和臨時變量在棧區(qū)上分配空間,這就是C實現(xiàn)函數(shù)遞歸調(diào)用的方法。由于遞歸會使用大量?臻g,所以遞歸一定要慎用,否則有棧溢出的可能。

命令行參數(shù)區(qū)

這里儲存著調(diào)用文件時命令行傳入的參數(shù)以及系統(tǒng)的環(huán)境變量。

調(diào)用一個函數(shù)的時候,參數(shù)會按照從右向左的順序壓入棧中,當(dāng)執(zhí)行完畢時,會從下往上依次返回,所以雖然內(nèi)存有限,但卻能運行很大的程序。

聯(lián)系方式0755-82591179

傳真:0755-82591176

郵箱:vicky@yingtexin.net

地址:深圳市龍華區(qū)民治街道民治大道973萬眾潤豐創(chuàng)業(yè)園A棟2樓A08