我們在上節(jié)中說到了棧區(qū)、堆區(qū)以及靜態(tài)存儲區(qū),那么我們來看看在程序文件的一般布局。我們先來看看不同代碼在可執(zhí)行程序中的對應(yīng)關(guān)系,如下圖所示
創(chuàng)新互聯(lián)公司-專業(yè)網(wǎng)站定制、快速模板網(wǎng)站建設(shè)、高性價比濟寧網(wǎng)站開發(fā)、企業(yè)建站全套包干低至880元,成熟完善的模板庫,直接使用。一站式濟寧網(wǎng)站制作公司更省心,省錢,快速模板網(wǎng)站建設(shè)找我們,業(yè)務(wù)覆蓋濟寧地區(qū)。費用合理售后完善,十余年實體公司更值得信賴。我們看到程序中的經(jīng)過初始化的全局變量和加 static 修飾的初始化過后的局部變量都放在 .data 段,未經(jīng)初始化的全局變量和加 static 修飾的局部變量都放在 .bss 段,函數(shù)和函數(shù)調(diào)用都放在 .text 段。
我們下來看看程序和進程的區(qū)別,程序是靜態(tài)的概念表現(xiàn)為一個可執(zhí)行文件,而進程是動圖的概念,程序由操作系統(tǒng)加載運行后得到進程。每個程序可以對應(yīng)多個進程,但是每個進程只能對應(yīng)一個程序。我們舉例來說,一個瀏覽器就相當(dāng)于是程序,它沒運行就沒有對應(yīng)的進程。但是我們可以同時多次打開同一個瀏覽器,這時每個打開的瀏覽器就相當(dāng)于是一個進程。
我們在面試中有時會遇到這樣的問題:包含腳本代碼的文本文件是一種類型的可執(zhí)行程序嗎?如果是,它對應(yīng)什么樣的進程呢?我們想的是腳本程序嘛,就肯定能直接運行哈,那它會對應(yīng)什么樣的進程呢?不知所云了。哈哈,我們來看看一般的可執(zhí)行程序和腳本文件的區(qū)別,如下圖所示
我們看到可執(zhí)行程序是由操作系統(tǒng)直接加載的,便直接對應(yīng)了一個進程。但是我們運行腳本文件之后,那么操作系統(tǒng)中會有對應(yīng)的腳本解釋程序,經(jīng)腳本解釋程序執(zhí)行后,便產(chǎn)生對應(yīng)的進程,這個進程反過來讀取并解釋執(zhí)行腳本。這樣腳本文件就得到運行啦。
下來我們來看看文件布局在內(nèi)存中的映射
我們看到可執(zhí)行程序 a.out 中分為頭文件、.text、.data 以及 .bss 段。對應(yīng)在進程中便去掉了頭文件而加上了棧和堆。那么我們接下來講講各個段的作用,堆棧段在程序運行后才正式存在,是程序運行的基礎(chǔ); .bss 段存放的是未初始化的全局變量和靜態(tài)變量; .text 段存放的是程序中的可執(zhí)行代碼; .data 段保存的是已經(jīng)初始化了的全局變量和靜態(tài)變量; .rodata 段存放程序中的常量值,如字符串常量。
靜態(tài)存儲區(qū)通常指程序中的 .bss 和 .data 段;只讀存儲區(qū)通常指程序中的 .rodata 段;局部變量所占空間為棧上的空間;動態(tài)空間為堆中的空間;程序可執(zhí)行代碼存放于 .text 段。
那么我們想下,同是全局變量和靜態(tài)變量,為什么初始化的和未初始化的需要保存在不同段中呢?通常在編譯器中,沒有初始化的變量,我們都要初始化為 0,如果我們一個一個的去檢查,是不是效率就很低呢?如果我們分開存放,那么那些已經(jīng)初始化過的變量就不用去檢查了,從而效率會變高。
通過對程序文件中內(nèi)存布局的學(xué)習(xí),總結(jié)如下:1、程序源碼在編譯后對應(yīng)可執(zhí)行程序中的不同存儲區(qū);2、程序和進程不同,程序是靜態(tài)概念,進程是動圖概念;3、堆棧段是程序運行的基礎(chǔ),只存在于進程空間中;4、程序可執(zhí)行代碼存放于 .text 段,是只讀的;5、.bss 和 .data 段用于保存全局變量和靜態(tài)變量。
歡迎大家一起來學(xué)習(xí) C 語言,可以加我QQ:243343083。
另外有需要云服務(wù)器可以了解下創(chuàng)新互聯(lián)scvps.cn,海內(nèi)外云服務(wù)器15元起步,三天無理由+7*72小時售后在線,公司持有idc許可證,提供“云服務(wù)器、裸金屬服務(wù)器、高防服務(wù)器、香港服務(wù)器、美國服務(wù)器、虛擬主機、免備案服務(wù)器”等云主機租用服務(wù)以及企業(yè)上云的綜合解決方案,具有“安全穩(wěn)定、簡單易用、服務(wù)可用性高、性價比高”等特點與優(yōu)勢,專為企業(yè)上云打造定制,能夠滿足用戶豐富、多元化的應(yīng)用場景需求。
標(biāo)題名稱:C之內(nèi)存布局(三十六)-創(chuàng)新互聯(lián)
標(biāo)題來源:http://jinyejixie.com/article8/pisop.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供營銷型網(wǎng)站建設(shè)、移動網(wǎng)站建設(shè)、品牌網(wǎng)站建設(shè)、網(wǎng)站排名、App設(shè)計、云服務(wù)器
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)
猜你還喜歡下面的內(nèi)容