inux系統下,程式是乙個可執行檔案,通常是elf格式。通常,linux的可執行檔案擁有兩種記憶體分配方式:儲存時 和 執行時
1、儲存時
看例項,下面是對可執行檔案aa執行size命令後得到的結果。
[root@***1 algriom]# size aa
text data bss dec hex filename
1257 500 16 1773 6ed aa
其中:text(**區):表示正文段大小,是cpu執行的機器指令部分,通常,是可共享的,所以即使是頻繁執行的程式在儲存器中也只需有乙個副本;
data(初始化資料區):表示包含靜態變數和已經初始化(可執行檔案包含了初始化的值)的全域性變數的資料段大小;
bss :表示未初始化的全域性變數和未初始化的靜態變數,稱之為未初始化資料段;
ps:第4列和第5列是分別以十進位制和十六進製制表示的三個段的總長度。
2、執行時(程序結構)
執行時是指乙個正在執行的程序在記憶體空間中的結構,也就是乙個程序的結構。
一般包括**區、初始化資料區、未初始化資料區、堆區和棧區5個部分。
前三者與儲存時相同,(1)棧區儲存函式引數值、返回值、區域性變數等。向下生長
(2)堆區用於動態記憶體分配。向上生長
堆區和棧區的區別如下:
(1)棧由作業系統自動管理,無需程式設計師手工控制,而堆區的申請和釋放工作由程式設計師控制。
(2)棧是一塊連續的記憶體區域,由系統預先設定,一般較小,從高位址向低位址增長;而堆是向高位址擴充套件的資料結構,是不連續的記憶體區域,空間較大。另外,分配的效率上,棧的分配比堆的分配要高效很多。
結論:1、 經過初始化的全域性變數和靜態變數儲存在資料段中。
2、 未經初始化的全域性變數和靜態變數儲存在bss段。
3、 函式內部宣告的區域性變數儲存在堆疊段中。
4、 const修飾的全域性變數儲存在文字段中,const修飾的區域性變數儲存在堆疊段中。
5、 字串常量儲存在文字段中。
linux程式儲存結構
linux系統下,程式是乙個可執行檔案,通常是elf格式。通常,linux的可執行檔案擁有兩種記憶體分配方式 儲存時和 執行時1 儲存時 看例項,下 面是對可執行檔案aa 執行size命令後得到的結果。root 1 algriom size aa text data bss dec hex file...
Linux程式儲存結構
在linux系統下,程式是乙個普通可執行檔案,以下列出乙個linux下elf格式可執行檔案的基本情況 可以看出,此elf格式可執行檔案在儲存時 沒有調入記憶體 分為 區 text 資料區 data 和未初始化資料區 bss 3個部分。各段基本內容說明如下 區 text segment 存放cpu執行...
Linux檔案儲存結構
大部分的linux檔案系統 如ext2 ext3 規定,乙個檔案由目錄項 inode和資料塊組成 理解inode,要從檔案儲存說起。檔案儲存在硬碟上,硬碟的最小儲存單位叫做 扇區 sector 每個扇區儲存512位元組 相當於0.5kb 作業系統讀取硬碟的時候,不會乙個扇區乙個扇區地讀取,這樣效率太...