任何程式語言 -> 產生兩種東西:指令和資料
所以我們了解指令和資料的存放方式是很有必要的!
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 堆空間 ...