Text段、Data段和BSS段


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

大體上可分為三段:Text段、Data段和BSS段。

text段用於存放代碼,通常情況下在內存中被映射為只讀,但data和bss是可寫的。

數據存放通常分成如下幾個部分:

1、棧:由編譯器自動分配,保存函數的局部變量和參數。

2、堆:一般由程序員動態分配釋放, 若程序員不釋放,程序結束時可能由OS回收 ,例如malloc。它不同與數據結構中的堆,它更類似於鏈表。

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

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

5、程序代碼區:存放函數體的二進制代碼。

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

 

參考別人的一段示例代碼:

 1 #include<stdio.h>
 2 #include<stdlib.h>
 3 #include<iostream>
 4 #include<string.h>
 5 using namespace std;
 6 
 7 static int a=1;//全局初始化區 
 8 int b=2;//全局初始化區 
 9 char *p;//全局未初始化區 
10 char *p2;//全局未初始化區,BSS段 
11 int *p3;//全局未初始化區 ,BSS段
12 int *p4;//全局未初始化區 ,BSS段
13 char *p5={"555555555"};//全局初始化區 
14 
15 int main(){
16     static int c=3;
17     int d=4;//內存棧
18     int e=7;//內存棧
19     
20     char *p6={"555555555"};
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 
27 
28     *p3=0x123;
29     strcpy(p,"123456789");//文字常量區
30     strcpy(p2,"987654321");
31     strcpy(p2,"123456789");
32 }
View Code

 

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM