C语言程序段的定义、实际应用分析
1、程序段的概念
程序段就是將你寫(xiě)的代碼分成不同的段,擁有相同段屬性的代碼鏈接時(shí)會(huì)被鏈接在一起。將來(lái)程序在內(nèi)存中運(yùn)行時(shí),相同段屬性的代碼就會(huì)加載在連續(xù)的地址中。如果你不指定代碼的段屬性,編譯器就會(huì)按照默認(rèn)的規(guī)則對(duì)代碼進(jìn)行程序段的劃分,所以寫(xiě)應(yīng)用程序的程序員不用關(guān)心程序段,反正編譯器會(huì)自動(dòng)劃分程序段。程序段分為先天段和自定義段。
先天段:就是每個(gè)程序都會(huì)有的基礎(chǔ)段屬性,你不用指定編譯器也會(huì)自動(dòng)劃分,包括代碼段、數(shù)據(jù)段、bss段;
自定義段:就要靠自己主動(dòng)去指定代碼的段屬性。
2、鏈接腳本
上面已經(jīng)將代碼賦予了不同的段屬性,相當(dāng)于對(duì)代碼進(jìn)行了分類。在鏈接的時(shí)候就需要將不同段屬性的代碼鏈接成一個(gè)可執(zhí)行程序,這就涉及到鏈接規(guī)則,怎么合理
的將代碼組織起來(lái),比如:哪些段放在前面,哪些段放在后面,相同段屬性的代碼要放在一起······。鏈接腳本就是指定鏈接規(guī)則,讓編譯器知道怎么組織代碼。
《嵌入式開(kāi)發(fā)(S5PV210)——u-boot的鏈接腳本分析》、《內(nèi)核(kernel)的鏈接腳本》。
3、程序段的組成
代碼段(.text):又叫文本段,代碼段其實(shí)就是你寫(xiě)的那些函數(shù)和頭文件;
數(shù)據(jù)段(.data):初始化為非零的全局變量;
bss段(.bss):未初始化或者初始化為零的全局變量;bss段在加載到內(nèi)存時(shí),整個(gè)段都會(huì)被清零。
自定義段:在寫(xiě)代碼時(shí)自己指定段屬性;
4、自定義段的好處
自定義段就是你主動(dòng)將某些代碼賦予特有的段屬性,將來(lái)在鏈接的時(shí)候,具有相同段屬性的代碼會(huì)被鏈接在一起。簡(jiǎn)單來(lái)說(shuō),就是你想把某些代碼鏈接的時(shí)候挨著放在一起,就可以把那些特有的段屬性。我的理解,自定義段的好處就是既有數(shù)組按下標(biāo)訪問(wèn)的優(yōu)勢(shì),也有鏈表方便擴(kuò)展的優(yōu)勢(shì)。因?yàn)槟銓⒋a賦予相同的段屬性,將來(lái)這些代碼都被鏈接在一塊,所有你可以向數(shù)組一樣去訪問(wèn)這些代碼;又因?yàn)樽远x段并沒(méi)有限制一個(gè)段的代碼數(shù)量,你想指定多少代碼為同一個(gè)段屬性都可以,所以又具有鏈表的擴(kuò)展性。
5、自定義段的應(yīng)用
《內(nèi)核啟動(dòng)過(guò)程中對(duì)CPU型號(hào)的確認(rèn)》、《內(nèi)核中對(duì)uboot傳參tags的校驗(yàn)》、《內(nèi)核啟動(dòng)過(guò)程中機(jī)器碼的確定》。
6、為什么C語(yǔ)言中未初始化的全局變量默認(rèn)值是零?
因?yàn)镃語(yǔ)言把未顯式初始化的全局變量放在了bss段,所以能夠保證其值為0。
7、 如何保證顯式初始化為非0的全局變量在main之前就被賦值了?
因?yàn)樗堰@類變量放在了.data段 中,而.data段會(huì)在main執(zhí)行之前被處理(初始化)
總結(jié)
以上是生活随笔為你收集整理的C语言程序段的定义、实际应用分析的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: linux软路由 iptv,LEDE x
- 下一篇: node2vec python_图上的机