在linux系統下,程式是乙個普通可執行檔案,以下列出乙個linux下elf格式可執行檔案的基本情況
可以看出,此elf格式可執行檔案在儲存時(沒有調入記憶體)分為**區(text)、資料區(data)和未初始化資料區(bss)3個部分。各段基本內容說明如下:
**區(text segment)。存放cpu執行的機器指令(machine instructions)。通常,**區是可共享的(即另外的執行程式可以呼叫它),使其可共享的目的是對於頻繁被執行的程式,只需要在記憶體中有乙份**即可。**區通常是唯讀的,使其唯讀的原因是防止程式意外地修改了它的指令。因此,常量資料在編譯時在**段中分配空間。**區的指令包括操作碼和操作物件(或物件位址引用)。如果是立即數(即具體的數值,如5),將直接包含在**段中;如果是區域性資料,將在執行時在棧區分配空間,然後再引用該資料的位址;如果是bss區和資料區,在**中同樣引用該資料的位址。
全域性初始化資料區/靜態資料區(initialized data segment/data segment)。或簡稱資料段,該區包含了在程式中明確被初始化的全域性變數、已經初始化的靜態變數(包括全域性靜態變數和區域性靜態變數)。但被const宣告的變數以及字串常量在**段中申請空間。例如,乙個不在任何函式體內的定義(全域性資料)如下:int maxcount =99;使得變數maxcount根據其初始值被儲存到初始化資料區中。在任意位置定義靜態變數的方式如下:static mincount=100;這定義了乙個靜態變數並初始化,如果是在任何函式體外定義,則表示其為乙個全域性靜態變數,如果在函式體內(區域性),則表示其為乙個區域性靜態變數。需要提及的是,如果在函式名前加上static,則表示此函式只能在當前檔案中被呼叫。
linux程式儲存結構
linux系統下,程式是乙個可執行檔案,通常是elf格式。通常,linux的可執行檔案擁有兩種記憶體分配方式 儲存時和 執行時1 儲存時 看例項,下 面是對可執行檔案aa 執行size命令後得到的結果。root 1 algriom size aa text data bss dec hex file...
linux 程式儲存結構
inux系統下,程式是乙個可執行檔案,通常是elf格式。通常,linux的可執行檔案擁有兩種記憶體分配方式 儲存時 和 執行時 1 儲存時 看例項,下面是對可執行檔案aa執行size命令後得到的結果。root 1 algriom size aa text data bss dec hex filen...
Linux檔案儲存結構
大部分的linux檔案系統 如ext2 ext3 規定,乙個檔案由目錄項 inode和資料塊組成 理解inode,要從檔案儲存說起。檔案儲存在硬碟上,硬碟的最小儲存單位叫做 扇區 sector 每個扇區儲存512位元組 相當於0.5kb 作業系統讀取硬碟的時候,不會乙個扇區乙個扇區地讀取,這樣效率太...