新聞中心
對我本人來說,學習任何一種高級語言,總想知道高級語言是如何被編譯并載入內(nèi)存的,一個程序的運行,在計算機內(nèi)存中是怎樣組織的等等問題,總想打破砂鍋問到底,有好多疑問,因此我就學習了匯編語言,匯編語言確實讓你能了解很多底層的東西,它可以直接跟寄存器接觸,內(nèi)存單元接觸,自己創(chuàng)建一個棧空間,也可以自己編寫安裝自己需要的中斷例程,讓中斷向量表相應的入口地址指向自己編寫安裝的中斷例程,讓你了解什么是端口,怎樣通過匯編指令對這些端口進行讀寫,讓你了解鍵盤即鼠標的工作原理,自己編寫鍵盤程序等等,確實很有意思,但是匯編有優(yōu)點,缺點也不少,這里不多說,畢竟主要講的是C語言。

站在用戶的角度思考問題,與客戶深入溝通,找到靖遠網(wǎng)站設(shè)計與靖遠網(wǎng)站推廣的解決方案,憑借多年的經(jīng)驗,讓設(shè)計與互聯(lián)網(wǎng)技術(shù)結(jié)合,創(chuàng)造個性化、用戶體驗好的作品,建站類型包括:網(wǎng)站設(shè)計制作、網(wǎng)站建設(shè)、企業(yè)官網(wǎng)、英文網(wǎng)站、手機端網(wǎng)站、網(wǎng)站推廣、國際域名空間、虛擬主機、企業(yè)郵箱。業(yè)務覆蓋靖遠地區(qū)。
學習任何東西,都不能了解就好,不能一知半解,畢竟大二全不如小而精,人才都是精通某一領(lǐng)域,在某一領(lǐng)域上作出貢獻,更不能沒信心,一有難題解決不了,就失去信心,從而放棄,那是絕不可取的,如果這樣那么一輩子也做不了什么事。算了,侃這么多跟標題無關(guān)的事,請大家原諒,下面正式介紹一下C語言在內(nèi)存中的組織方式,其實沒有過多要講,但是還是介紹一下吧!
一個可以執(zhí)行的C程序,一般說來有四個區(qū)域組成,哪四個呢?你猜?當然不可能要你猜,猜是猜不著的,那就說出來吧:①、代碼段,程序運行時執(zhí)行的機器指令,何為機器指令,也就是一連串的二進制數(shù),電腦認不得高級語言,必須被編譯等階段轉(zhuǎn)換成二進制機器指令才能被機器所知曉,如if(a>b)…,它也會被編譯成機器指令(二進制代碼),具體是什么樣的機器指令,說實話我也不太清楚。②、靜態(tài)數(shù)據(jù)區(qū),包含程序運行周期中一直存在的數(shù)據(jù),比如全局變量和靜態(tài)變量,什么字符串常量啊,等等。③、堆區(qū):程序運行時動態(tài)分配的存儲空間,一般由程序員分配和釋放,比如用malloc、calloc等。堆的分配方式類似于鏈表(以后會說到),但是它跟數(shù)據(jù)結(jié)構(gòu)中的堆不是一回事,完了,差點又跑偏了,不說了。④、當然就是堆棧中的棧了,一般由系統(tǒng)自動分配,其包含函數(shù)的調(diào)用信息,存放函數(shù)的參數(shù)值,還有就是局部變量的值,操作方式跟數(shù)據(jù)結(jié)構(gòu)中的棧很類似。
舉個類子:
int a; ①
char b; ②
int main(){
int b=10; ③
static int n=2; ④
char c[]={'a','b'}; ⑤
char *p="i love you"; ⑥
int *p=(int *)malloc(sizeof(int)); ⑦
}
上面一段程序①跟②,因為是全局變量,很容易想到它們在靜態(tài)數(shù)據(jù)區(qū)。③處的數(shù)據(jù)因為是局部的,所以在棧區(qū),④嘛,因為有static修飾符修飾,靜態(tài)局部變量故在靜態(tài)數(shù)據(jù)區(qū),⑤不要說,也是在棧區(qū),局部字符數(shù)組,也是局部變量。⑥有所區(qū)別,指針變量p毋庸置疑在棧區(qū),但是后面的i love you是常量字符串,卻在靜態(tài)數(shù)據(jù)區(qū)。指針變量p指向字符串常量。⑦不多說,在堆區(qū)。
以上就是關(guān)于C程序在內(nèi)存中組織方式的簡要介紹。
文章題目:C程序在內(nèi)存中的組織方式
鏈接URL:http://fisionsoft.com.cn/article/ccsspco.html


咨詢
建站咨詢
