linux系統(X86)儲存記憶體布局

2021-09-20 06:51:52 字數 1077 閱讀 2236

引數和環境區:程式執行的時候,命令列引數通過兩個入口引數傳遞給main()函式,第乙個引數 int argc表示

命令列引數的個數,第二個 char ar** ,是乙個指向命令列引數的指標陣列,每個命令列引數都是以'\0'結尾

的字串。

棧區:用來存放程式中的動態區域性變數(不包括static修飾的區域性變數,這類變數儲存在資料段);函式引數

按照從右往左的順序依次入棧,而函式呼叫結束後,函式的返回值也是存入棧中;因為棧具有先進先出的特點

,所以棧用來作為儲存和/恢復呼叫現場

堆區:堆主要用來存放程序進行過程中動態分配的記憶體(malloc,calloc,realloc),它的大小並不是固定的;當

使用malloc等函式分配記憶體的時候,新分配的記憶體就被動態新增到堆中(堆被擴張);使用free函式釋放記憶體就

是從堆中移除(堆被縮減);在堆中,有一塊特殊的區域,叫做mmap物理記憶體對映區,用於mmap函式。

bss區(未初始化資料區):bss段包含了程式中沒有初始化的全域性變數,靜態變數(靜態區域性變數和靜態全域性變

量),在程式開始執行之前,核心將此段中的資料全部初始化成0或空指標

資料區:這塊區域用來存放可執行檔案中不具有常屬性且被初始化的靜態變數和全域性變數

**區:這是cpu執行的機器指令的部分,正文段是用來存放可執行檔案的操作指令,還有一些字面值常量和具有

常屬性的靜態變數和全域性變數,它是可執行程式在記憶體中的映像。

儲存區與儲存資料型別的整理

儲存區資料型別

**區①字面值常量②具有常屬性且被初始化的靜態所有變數和全域性變數

資料區不具有常屬性且被初始化的靜態所有變數和全域性變數

bss區

所有(不管是否具有常屬性)未初始化的靜態所有變數和全域性變數

棧區動態區域性變數(不管是否被初始化,具有常屬性)

x86記憶體定址

最近又研究了一下記憶體定址,沒有乙份資料能講的透徹,不是不細緻,而是缺乏整體感,都不全面,讓人看完後沒有乙個整體模型,現就我關心的問題記錄如下,如果要很全面很細緻的記錄的話會花費我很多精力,所以只是記錄大概流程,以後再慢慢修正吧。所有貼圖皆來自網路 一 分段的由來 1.8086 分段的產生主要是因為...

安裝啟動Sylix OS系統 X86

first grub引導啟動 開機長按delete bios介面 boot usb u盤啟動 showmount 命令檢視系統掛載硬碟情況,umount media hdd0 如果有硬碟,將硬碟解除安裝 ll dev blk 檢視 sylixos 識別的硬碟裝置名 fdsk f dev blk hd...

X86記憶體管理之分段管理

最近一直在學習x86彙編,自己打算從基礎的開始學習,對以後做嵌入式開發有一定的幫助。今天看了關於在x86處理上兩種關於記憶體管理的方式 分段管理和分頁管理,以及課程中沒有講到的段頁式管理。一.分段管理 在286以下的cpu中 8086,8088 位址線是20位,可定址範圍220b 1m。而在8088...