程式中的記憶體布局

2021-09-19 22:59:33 字數 2405 閱讀 5312

先看一張示意圖:不同**在可執行程式中的對應關係

程式和程序的不同:

程式是 靜態的 概念,表現形式為乙個可執行檔案

程序是 動態的 概念,程式由作業系統載入執行後得到程序

每個程式可以對應多個程序

每個程序只能對應乙個程式

指令碼程式是一種可執行程式,但是它需要作業系統載入指令碼解釋程式來生成程序,然後程序對指令碼檔案進行讀取並解釋執行。

檔案布局在記憶體中的對映:

各個段的作用:

堆疊段在程式執行後才正式存在,是程式執行的基礎

.bss段存放的是未初始化全域性變數和靜態變數

.text段存放的是程式中的可執行**

.data段儲存的是已經初始化了的全域性變數和靜態變數

.rodata段存放程式中的常量值,如字串常量

靜態儲存區通常指程式中的.bss和.data段

唯讀儲存區通常指的是程式中的.rodata段(const修飾的變數)

區域性變數所佔空間為棧上的空間

動態空間為堆上的空間

程式可執行**存放在.text段

問題:同是全域性變數和靜態變數,為什麼初始化和未初始化的儲存在不同段中?

效率問題。

未初始化變數(.bss)的在載入時全部初始化為0,這樣載入速度可以更快。初始化(.data)後的變數必須在載入時保證一一對應,且必須儲存好,相對複雜一點。區分儲存有利於程式載入。

小結:程式原始碼在編譯後對應可執行程式中的不同儲存區

程式和程序不同,程式靜態概念,程序是動態概念

堆疊段是程式執行的基礎,只存在於程序空間中

程式可執行程式存放於.text段,是唯讀的

.bss(未初始化的)和.data(已經初始化的)段用於儲存全域性變數和靜態變數

先看一張示意圖:不同**在可執行程式中的對應關係

程式和程序的不同:

程式是 靜態的 概念,表現形式為乙個可執行檔案

程序是 動態的 概念,程式由作業系統載入執行後得到程序

每個程式可以對應多個程序

每個程序只能對應乙個程式

指令碼程式是一種可執行程式,但是它需要作業系統載入指令碼解釋程式來生成程序,然後程序對指令碼檔案進行讀取並解釋執行。

檔案布局在記憶體中的對映:

各個段的作用:

堆疊段在程式執行後才正式存在,是程式執行的基礎

.bss段存放的是未初始化全域性變數和靜態變數

.text段存放的是程式中的可執行**

.data段儲存的是已經初始化了的全域性變數和靜態變數

.rodata段存放程式中的常量值,如字串常量

靜態儲存區通常指程式中的.bss和.data段

唯讀儲存區通常指的是程式中的.rodata段(const修飾的變數)

區域性變數所佔空間為棧上的空間

動態空間為堆上的空間

程式可執行**存放在.text段

問題:同是全域性變數和靜態變數,為什麼初始化和未初始化的儲存在不同段中?

效率問題。

未初始化變數(.bss)的在載入時全部初始化為0,這樣載入速度可以更快。初始化(.data)後的變數必須在載入時保證一一對應,且必須儲存好,相對複雜一點。區分儲存有利於程式載入。

小結:程式原始碼在編譯後對應可執行程式中的不同儲存區

程式和程序不同,程式靜態概念,程序是動態概念

堆疊段是程式執行的基礎,只存在於程序空間中

程式可執行程式存放於.text段,是唯讀的

.bss(未初始化的)和.data(已經初始化的)段用於儲存全域性變數和靜態變數

程式在記憶體中的布局

c語言程式在記憶體中的分布 段 text 存放著程式的機器碼和唯讀資料 常量 全域性區 靜態區 由編譯器編譯時分配,程式執行結束後釋放 屬於靜態記憶體分配 在程式的二進位制檔案中,bss段不佔儲存空間,只有在載入到記憶體中才分配 data段 存放已初始化的靜態變數 static 修飾 和全域性變數 ...

程式的記憶體布局

程序的記憶體布局 1.段 存放程式的可執行 2.唯讀資料段 ro data 存放不需要被更改的資料 3.已初始化讀寫資料段 rw data 存放在程式中宣告的,並且具有初始值的變數。程式執行時應位於可讀寫的區域,並具有初始值,以供程式執行時讀寫。4.未初始化資料段 bss 未初始化資料實在程式中宣告...

程式的記憶體布局

專題五 記憶體管理的藝術。包括以下章節 各個段的作用 堆疊段在程式執行後才正式存在,是程式執行的基礎.bss段存放的是未初始化的全域性變數和靜態變數.text段存放的是程式中的可執行 data段儲存的是那些已經初始化了的全域性變數和靜態變數.rodata段存放程式中的常量值,如字串常量竊以為 區域性...