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

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

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

C語言——內存分配

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

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

01

虛擬內存

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

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

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

02

內存分配

首先,我們來看看內存長啥樣。

 

 

對,就是這么一個簡陋的長條子。我們的程序就是在這么一段內存里產生了各種各樣奇妙的結果。

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

代碼區(qū)

顧名思義,你的代碼全部儲存在這里。程序執(zhí)行的時候,順序結構只會執(zhí)行一次,如果是遞歸,或者調用函數(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分配的內存便是從這里分配的。

棧區(qū)

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

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

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

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

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

傳真:0755-82591176

郵箱:vicky@yingtexin.net

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