linux程式儲存結構

2021-06-27 01:40:01 字數 2275 閱讀 7381

linux系統下,程式是乙個可執行檔案,通常是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、執行時(程序結構)

執行時是指乙個正在執行的程序在記憶體空間中的結構,也就是乙個程序的結構。

一般包括**區、全域性儲存區(初始化資料區data、未初始化資料區bbs)、文字常量區、堆和棧5個部分。

(1)**區:存放函式體的二進位制**

(2)全域性(靜態)儲存區:存放全域性變數、靜態變數;

data:存放初始化的全域性變數和靜態變數static

bbs:存放未初始化的全域性變數和靜態變數static,bbs段中,記憶體中所有位元組預設值都是0;

【c中static作用】:1、隱藏;2、預設初始化為0,只能賦一次初值;3、保持區域性變數內容持久

(3)文字常量區(唯讀區):常量字串;const

修飾的全域性變數儲存在文字段中,

const

修飾的區域性變數儲存在棧中。

但是,陣列只存放於棧、全域性儲存區

(4)棧區:儲存函式引數值、返回值、區域性變數等。向下生長。

(5)堆區:用於動態記憶體分配。向上生長。函式結束變數就消失。可以跨函式使用,直到free時才釋放

int main()

答案:6,4

分析:p指標儲存在棧,而其儲存的hello!存在文字常量區;

a 陣列存放在棧,此時的hello不僅僅存放在文字常量區,還拷貝乙份存放在棧中,因為a是乙個存放在棧上的陣列。

堆區和棧區的區別如下:

(1)由作業系統自動管理,無需程式設計師手工控制,而區的申請和釋放工作由程式設計師控制。一般由malloc(或new)函式來分配記憶體塊,並且需要用free(delete)函式釋放記憶體。如果程式設計師沒有釋放掉,那麼就會出現常說的

記憶體洩漏

問題。需要注意的是,兩個緊挨著定義的指標變數,所指向的malloc出來的兩塊記憶體並不一定的是緊挨著的,所以會產生記憶體碎片。

是使用者存放程式臨時建立的區域性變數,也就是說我們

函式括弧「{}」中定義的變數

(但不包括static宣告的變數,static意味著在資料段中存放變數)。除此以外,在函式被呼叫時,其引數也會被壓入發起呼叫的程序棧中,並且待到呼叫結束後,函式的返回值也會被存放回棧中。由於棧的先進先出特點,所以棧特別方便用來儲存/恢復呼叫現場。從這個意義上講,我們可以把堆疊看成乙個寄存、交換臨時資料的記憶體區。

(2)是一塊連續的記憶體區域,由系統預先設定,一般較小,從高位址向低位址增長;而是向高位址擴充套件的資料結構,是不連續的記憶體區域,空間較大。另外,分配的效率上,棧的分配比堆的分配要高效很多。

注意: 1、

初始化的全域性變數和靜態變數儲存在data中。2、

未經初始化的全域性變數和靜態變數儲存在

bss中。3

、函式內部宣告的區域性變數

儲存在中。4、

const

修飾的全域性變數儲存在文字段中,

const

修飾的區域性變數儲存在棧中。5、

字串常量儲存在文字段中。

3、例子程式

int a = 0; 全域性初始化區

char *p1; 全域性未初始化區

main()

linux 程式儲存結構

inux系統下,程式是乙個可執行檔案,通常是elf格式。通常,linux的可執行檔案擁有兩種記憶體分配方式 儲存時 和 執行時 1 儲存時 看例項,下面是對可執行檔案aa執行size命令後得到的結果。root 1 algriom size aa text data bss dec hex filen...

Linux程式儲存結構

在linux系統下,程式是乙個普通可執行檔案,以下列出乙個linux下elf格式可執行檔案的基本情況 可以看出,此elf格式可執行檔案在儲存時 沒有調入記憶體 分為 區 text 資料區 data 和未初始化資料區 bss 3個部分。各段基本內容說明如下 區 text segment 存放cpu執行...

Linux檔案儲存結構

大部分的linux檔案系統 如ext2 ext3 規定,乙個檔案由目錄項 inode和資料塊組成 理解inode,要從檔案儲存說起。檔案儲存在硬碟上,硬碟的最小儲存單位叫做 扇區 sector 每個扇區儲存512位元組 相當於0.5kb 作業系統讀取硬碟的時候,不會乙個扇區乙個扇區地讀取,這樣效率太...