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