淺談c語言代碼段 數據段 bss段


代碼段、數據段、bss段

(1)編譯器在編譯程序的時候,將程序中的所有的元素分成了一些組成部分,各部分構成一個段,所以說段是可執行程序的組成部分。

(2)代碼段:代碼段就是程序中的可執行部分,直觀理解代碼段就是函數堆疊組成的。

(3)數據段(也被稱為數據區、靜態數據區、靜態區):數據段就是程序中的數據,直觀理解就是C語言程序中的全局變量。(注意:全局變量才算是程序的數據,局部變量不算程序的數據,只能算是函數的數據)

(4)bss段(又叫ZI(zero initial)段):bss段的特點就是被初始化為0,bss段本質上也是屬於數據段,bss段就是被初始化為0的數據段。 注意區分:數據段(.data)和bss段的區別和聯系:二者本來沒有本質區別,都是用來存放C程序中的全局變量的。區別在於把顯示初始化為非零的全局變量存在.data段中,而把顯式初始化為0或者並未顯式初始化(C語言規定未顯式初始化的全局變量值默認為0)的全局變量存在bss段。

有些特殊數據會被放到代碼段

(1)C語言中使用char *p = "linux";定義字符串時,字符串"linux"實際被分配在代碼段,也就是說這個"linux"字符串實際上是一個常量字符串而不是變量字符串。

(2)const型常量:C語言中const關鍵字用來定義常量,常量就是不能被改變的量。

const的實現方法至少有2種

第一種就是編譯將const修飾的變量放在代碼段去以實現不能修改(普遍見於各種單片機的編譯器);

第二種就是由編譯器來檢查以確保const型的常量不會被修改,實際上const型的常量還是和普通變量一樣放在數據段的(gcc中就是這樣實現的)。

顯式初始化為非零的全局變量和靜態局部變量放在數據段

(1)放在.data段的變量有2種:第一種是顯式初始化為非零的全局變量。第二種是靜態局部變量,也就是static修飾的局部變量。(普通局部變量分配在棧上,靜態局部變量分配在.data段)

未初始化或顯式初始化為0的全局變量放在bss段 (1)bss段和.data段並沒有本質區別,幾乎可以不用明確去區分這兩種。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM