斬嘉濤用啊,做證技術(shù),找大神q......1.代碼段(code或text)代碼段由各個函數(shù)產(chǎn)生,函數(shù)的每一個語句將最終經(jīng)過編繹和匯編生成二進(jìn)制機器代碼(具體生生哪種體系結(jié)構(gòu)的機器代碼由編譯器決定)。
2.只讀數(shù)據(jù)段(RO Data)只讀數(shù)據(jù)段由程序中所使用的數(shù)據(jù)產(chǎn)生,該部分?jǐn)?shù)據(jù)的特點是在運行中不需要改變,因此編譯器會將該數(shù)據(jù)段放入只讀的部分中。C語言中的只讀全局變量,只讀局部變量,程序中使用的常量等會在編譯時被放入到只讀數(shù)據(jù)區(qū)。注意:定義全局變量const char a[100]={"ABCDEFG"};將生成大小為100個字節(jié)的只讀數(shù)據(jù)區(qū),并使用“ABCDEFG”初始化。如果定義為:const char a[ ]={"ABCDEFG"};則根據(jù)字符串長度生成8個字節(jié)的只讀數(shù)據(jù)段(還有’\0’),所以在只讀數(shù)據(jù)段中,一般都需要做完全的初始化。3.讀寫數(shù)據(jù)段(RW Data)讀寫數(shù)據(jù)段表示了在目標(biāo)文件中一部分可以讀也可以寫的數(shù)據(jù)區(qū),在某些場合它們又被稱為已初始化數(shù)據(jù)段,這部分?jǐn)?shù)據(jù)段和代碼段,與只讀數(shù)據(jù)段一樣都屬于程序中的靜態(tài)區(qū)域,但具有可寫性的特點。通常已初始化的全局變量和局部靜態(tài)變量被放在了讀寫數(shù)據(jù)段,如: 在函數(shù)中定義static char b[ 100]={“ABCDEFG”};讀寫數(shù)據(jù)區(qū)的特點是必須在程序經(jīng)過初始化,如果只定義,沒初始值,則不會生成讀寫數(shù)據(jù)區(qū),而會定位為未初始化數(shù)據(jù)區(qū)(BSS)。如果全局變量(函數(shù)外部定義的變量)加入static修飾,這表示只能在文件內(nèi)使用,而不能被其他文件使用。
4. 未初始化數(shù)據(jù)段(BSS)與讀寫數(shù)據(jù)段類似,它也屬于靜態(tài)數(shù)據(jù)區(qū),但是該段中的數(shù)據(jù)沒有經(jīng)過初始化。因此它只會在目標(biāo)文件中被標(biāo)識,而不會真正稱為目標(biāo)文件中的一段,該段將會在運行時產(chǎn)生。未初始化數(shù)據(jù)段只在運行的初始化階段才會產(chǎn)生,因此它的大小不會影響目標(biāo)文件的大小。