C之內(nèi)存布局(三十六)-創(chuàng)新互聯(lián)

    我們?cè)谏瞎?jié)中說(shuō)到了棧區(qū)、堆區(qū)以及靜態(tài)存儲(chǔ)區(qū),那么我們來(lái)看看在程序文件的一般布局。我們先來(lái)看看不同代碼在可執(zhí)行程序中的對(duì)應(yīng)關(guān)系,如下圖所示

創(chuàng)新互聯(lián)公司-專業(yè)網(wǎng)站定制、快速模板網(wǎng)站建設(shè)、高性價(jià)比濟(jì)寧網(wǎng)站開發(fā)、企業(yè)建站全套包干低至880元,成熟完善的模板庫(kù),直接使用。一站式濟(jì)寧網(wǎng)站制作公司更省心,省錢,快速模板網(wǎng)站建設(shè)找我們,業(yè)務(wù)覆蓋濟(jì)寧地區(qū)。費(fèi)用合理售后完善,十余年實(shí)體公司更值得信賴。

C之內(nèi)存布局(三十六)

        我們看到程序中的經(jīng)過(guò)初始化的全局變量和加 static 修飾的初始化過(guò)后的局部變量都放在 .data 段,未經(jīng)初始化的全局變量和加 static 修飾的局部變量都放在 .bss 段,函數(shù)和函數(shù)調(diào)用都放在 .text 段。

        我們下來(lái)看看程序和進(jìn)程的區(qū)別,程序是靜態(tài)的概念表現(xiàn)為一個(gè)可執(zhí)行文件,而進(jìn)程是動(dòng)圖的概念,程序由操作系統(tǒng)加載運(yùn)行后得到進(jìn)程。每個(gè)程序可以對(duì)應(yīng)多個(gè)進(jìn)程,但是每個(gè)進(jìn)程只能對(duì)應(yīng)一個(gè)程序。我們舉例來(lái)說(shuō),一個(gè)瀏覽器就相當(dāng)于是程序,它沒運(yùn)行就沒有對(duì)應(yīng)的進(jìn)程。但是我們可以同時(shí)多次打開同一個(gè)瀏覽器,這時(shí)每個(gè)打開的瀏覽器就相當(dāng)于是一個(gè)進(jìn)程。

        我們?cè)诿嬖囍杏袝r(shí)會(huì)遇到這樣的問(wèn)題:包含腳本代碼的文本文件是一種類型的可執(zhí)行程序嗎?如果是,它對(duì)應(yīng)什么樣的進(jìn)程呢?我們想的是腳本程序嘛,就肯定能直接運(yùn)行哈,那它會(huì)對(duì)應(yīng)什么樣的進(jìn)程呢?不知所云了。哈哈,我們來(lái)看看一般的可執(zhí)行程序和腳本文件的區(qū)別,如下圖所示

C之內(nèi)存布局(三十六)

        我們看到可執(zhí)行程序是由操作系統(tǒng)直接加載的,便直接對(duì)應(yīng)了一個(gè)進(jìn)程。但是我們運(yùn)行腳本文件之后,那么操作系統(tǒng)中會(huì)有對(duì)應(yīng)的腳本解釋程序,經(jīng)腳本解釋程序執(zhí)行后,便產(chǎn)生對(duì)應(yīng)的進(jìn)程,這個(gè)進(jìn)程反過(guò)來(lái)讀取并解釋執(zhí)行腳本。這樣腳本文件就得到運(yùn)行啦。

        下來(lái)我們來(lái)看看文件布局在內(nèi)存中的映射

C之內(nèi)存布局(三十六)

        我們看到可執(zhí)行程序 a.out 中分為頭文件、.text、.data 以及 .bss 段。對(duì)應(yīng)在進(jìn)程中便去掉了頭文件而加上了棧和堆。那么我們接下來(lái)講講各個(gè)段的作用,堆棧段在程序運(yùn)行后才正式存在,是程序運(yùn)行的基礎(chǔ); .bss 段存放的是未初始化的全局變量和靜態(tài)變量; .text 段存放的是程序中的可執(zhí)行代碼; .data 段保存的是已經(jīng)初始化了的全局變量和靜態(tài)變量; .rodata 段存放程序中的常量值,如字符串常量。

        靜態(tài)存儲(chǔ)區(qū)通常指程序中的 .bss 和 .data 段;只讀存儲(chǔ)區(qū)通常指程序中的 .rodata 段;局部變量所占空間為棧上的空間;動(dòng)態(tài)空間為堆中的空間;程序可執(zhí)行代碼存放于 .text 段。

        那么我們想下,同是全局變量和靜態(tài)變量,為什么初始化的和未初始化的需要保存在不同段中呢?通常在編譯器中,沒有初始化的變量,我們都要初始化為 0,如果我們一個(gè)一個(gè)的去檢查,是不是效率就很低呢?如果我們分開存放,那么那些已經(jīng)初始化過(guò)的變量就不用去檢查了,從而效率會(huì)變高。

        通過(guò)對(duì)程序文件中內(nèi)存布局的學(xué)習(xí),總結(jié)如下:1、程序源碼在編譯后對(duì)應(yīng)可執(zhí)行程序中的不同存儲(chǔ)區(qū);2、程序和進(jìn)程不同,程序是靜態(tài)概念,進(jìn)程是動(dòng)圖概念;3、堆棧段是程序運(yùn)行的基礎(chǔ),只存在于進(jìn)程空間中;4、程序可執(zhí)行代碼存放于 .text 段,是只讀的;5、.bss 和 .data 段用于保存全局變量和靜態(tài)變量。

        歡迎大家一起來(lái)學(xué)習(xí) C 語(yǔ)言,可以加我QQ:243343083。

另外有需要云服務(wù)器可以了解下創(chuàng)新互聯(lián)scvps.cn,海內(nèi)外云服務(wù)器15元起步,三天無(wú)理由+7*72小時(shí)售后在線,公司持有idc許可證,提供“云服務(wù)器、裸金屬服務(wù)器、高防服務(wù)器、香港服務(wù)器、美國(guó)服務(wù)器、虛擬主機(jī)、免備案服務(wù)器”等云主機(jī)租用服務(wù)以及企業(yè)上云的綜合解決方案,具有“安全穩(wěn)定、簡(jiǎn)單易用、服務(wù)可用性高、性價(jià)比高”等特點(diǎn)與優(yōu)勢(shì),專為企業(yè)上云打造定制,能夠滿足用戶豐富、多元化的應(yīng)用場(chǎng)景需求。

標(biāo)題名稱:C之內(nèi)存布局(三十六)-創(chuàng)新互聯(lián)
標(biāo)題來(lái)源:http://www.muchs.cn/article8/pisop.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供營(yíng)銷型網(wǎng)站建設(shè)、移動(dòng)網(wǎng)站建設(shè)、品牌網(wǎng)站建設(shè)、網(wǎng)站排名、App設(shè)計(jì)、云服務(wù)器

廣告

聲明:本網(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í)需注明來(lái)源: 創(chuàng)新互聯(lián)

網(wǎng)站建設(shè)網(wǎng)站維護(hù)公司