必會1 程序虛擬位址空間區域的劃分

2021-10-04 12:08:02 字數 952 閱讀 3654

任何程式語言 -> 產生兩種東西:指令和資料

所以我們了解指令和資料的存放方式是很有必要的!

x86 32位linux環境下,系統給程序分配乙個4g的虛擬位址空間

(64位下,可以參考:

!區域性靜態變數存放在資料段,按照是否初始化,是否為零分開存放。當程式執行到static int e = 13; 時才初始化。

#include

int gdata1 =

10int gdata2 =0;

int gdata3;

static

int gdata4 =11;

static

int gdata5 =0;

static

int gdata6;

intmain()

資料型別

存放區域

舉例變數

全域性變數已初始化且不為零

.data

gdata1

全域性變數已初始化且為零

.bss

gdata2

全域性變數未初始化

.bss

gdata3

全域性靜態變數已初始化且不為零

.data

gdata4

全域性靜態變數已初始化且為零

.bss

gdata5

全域性靜態變數未初始化

.bss

gdata6

區域性變數

產生指令放在.text

a,b,c

區域性靜態變數已初始化且不為零

.data

e區域性靜態變數已初始化且為零

.bss

f區域性未初始化靜態變數

.bss

g

程序的虛擬位址空間

linux程序虛擬位址空間是linux記憶體管理的乙個重要部分。總的虛擬位址空間通常按3 1的比例劃分,其中1g分給核心,3g分給使用者。由低位址到高位址分別為 唯讀段 該部分空間 只能讀,不可寫 包括 段 rodata 段 c常量字串和 define定義的常量 資料段 儲存全域性變數 靜態變數 的...

程序的虛擬位址空間劃分

虛擬位址 virtual address cpu啟動保護模式後,程式執行在虛擬位址空間中。注意,並不是所有的 程式 都是執行在虛擬位址中。cpu在啟動的時候是執行在實模式的,bootloader以及核心在初始化頁表之前並不使用虛擬位址,而是直接使用實體地址的。每乙個程序被給予它的非常私有的虛擬位址空...

程序虛擬位址空間的劃分

使用的linux作業系統32位 4gb劃分為兩大部分核心和使用者,核心 1g,使用者3g。1g的核心位址空間可訪問全部的物理記憶體位址 3g的使用者位址空間訪問最大 3g的物理記憶體位址 使用者又劃分為棧空間,堆空間,全域性 資料區,段。1 棧空間 儲存著區域性變數,函式形參,自動變數 2 堆空間 ...