Text段 Data段和BSS段

2022-08-19 11:21:12 字數 1413 閱讀 1807

不同的compiler在編譯的過程中對於儲存的分配可能略有不同,但基本結構大致相同。

大體上可分為三段:text段、data段和bss段。

text段用於存放**,通常情況下在記憶體中被對映為唯讀,但data和bss是可寫的。

資料存放通常分成如下幾個部分:

1、棧:由編譯器自動分配,儲存函式的區域性變數和引數。

2、堆:一般由程式設計師動態分配釋放, 若程式設計師不釋放,程式結束時可能由os** ,例如malloc。它不同與資料結構中的堆,它更類似於鍊錶。

3、全域性區:全域性變數和靜態變數的儲存是放在一塊的,初始化的全域性變數和靜態變數在一塊區域。

4、文字常量區:這一區域很多情況下在**區,因為**段和常量一樣是唯讀的。

5、程式**區:存放函式體的二進位制**。

6、bss段:定義而沒有賦初值的全域性變數和靜態變數,放在這個區域,通常只是記錄變數名和大小,相當於乙個佔位符。

1 #include2 #include3 #include4 #include

5using

namespace

std;67

static

int a=1;//

全域性初始化區

8int b=2;//

全域性初始化區

9char *p;//

全域性未初始化區

10char *p2;//

全域性未初始化區,bss段

11int *p3;//

全域性未初始化區 ,bss段

12int *p4;//

全域性未初始化區 ,bss段

13char *p5=;//

全域性初始化區

1415

intmain();

21 p=(char*)malloc(sizeof(char)*10);//

記憶體堆22 p2=(char*)malloc(sizeof(char)*10);//

記憶體堆23 p3=(int*)malloc(sizeof(int));//

記憶體堆24 p4=(int*)malloc(sizeof(int)*10);//

記憶體堆25

for(int i=0;i<=9;i++)p4[i]=0x1;26

2728 *p3=0x123

;29 strcpy(p,"

123456789

");//

文字常量區

30 strcpy(p2,"

987654321");

31 strcpy(p2,"

123456789");

32 }

view code

text段,data段,bss段,堆和棧

乙個程式一般分為3段 text段,data段,bss段 text段 就是放程式 的,編譯時確定,唯讀,data段 存放在編譯階段 而非執行時 就能確定的資料,可讀可寫 就是通常所說的靜態儲存區,賦了初值的全域性變數和靜態變數存放在這個區域,常量也存放在這個區域 bss段 定義而沒有賦初值的全域性變數...

text段,data段,bss段,堆和棧

乙個程式一般分為3段 text段,data段,bss段 text段 就是放程式 的,編譯時確定,唯讀,data段 存放在編譯階段 而非執行時 就能確定的資料,可讀可寫 就是通常所說的靜態儲存區,賦了初值的全域性變數和靜態變數存放在這個區域,常量也存放在這個區域 bss段 定義而沒有賦初值的全域性變數...

text段 data段和bss段知識介紹

一 總體概述 1 bss 可讀可寫 bss是英文block started by symbol的簡稱,通常是指用來存放程式中未初始化的全域性變數的一塊記憶體區域,在程式載入時由核心清0。bss段屬於靜態記憶體分配。它的初始值也是由使用者自己定義的連線定位檔案所確定,使用者應該將它定義在可讀寫的ram...