日本高清不卡中文字幕-一起草草视频在线观看-亚洲精品一区二区三区色-国产亚洲精品免费视频

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

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

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

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

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

01

虛擬內(nèi)存

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

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

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

02

內(nèi)存分配

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

 

 

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

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

代碼區(qū)

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

rodata區(qū)域

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

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

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

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

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

堆區(qū)

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

棧區(qū)

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

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

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

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

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

傳真:0755-82591176

郵箱:vicky@yingtexin.net

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

泽普县| 尚义县| 衡水市| 施秉县| 龙门县| 固镇县| 化德县| 高陵县| 钦州市| 勃利县| 青龙| 仪陇县| 成武县| 乌兰察布市| 临邑县| 清原| 高州市| 白沙| 昆山市| 丹棱县| 石狮市| 留坝县| 泽州县| 林口县| 泰州市| 巴东县| 应城市| 漯河市| 丰城市| 抚顺市| 集贤县| 西藏| 天全县| 东源县| 樟树市| 东台市| 新乐市| 玉门市| 永州市| 抚松县| 吉隆县|