Text段、Data段和BSS段
不同的compiler在編譯的過(guò)程中對(duì)于存儲(chǔ)的分配可能略有不同,但基本結(jié)構(gòu)大致相同。
大體上可分為三段:Text段、Data段和BSS段。
text段用于存放代碼,通常情況下在內(nèi)存中被映射為只讀,但data和bss是可寫(xiě)的。
數(shù)據(jù)存放通常分成如下幾個(gè)部分:
1、棧:由編譯器自動(dòng)分配,保存函數(shù)的局部變量和參數(shù)。
2、堆:一般由程序員動(dòng)態(tài)分配釋放, 若程序員不釋放,程序結(jié)束時(shí)可能由OS回收 ,例如malloc。它不同與數(shù)據(jù)結(jié)構(gòu)中的堆,它更類(lèi)似于鏈表。
3、全局區(qū):全局變量和靜態(tài)變量的存儲(chǔ)是放在一塊的,初始化的全局變量和靜態(tài)變量在一塊區(qū)域。
4、文字常量區(qū):這一區(qū)域很多情況下在代碼區(qū),因?yàn)榇a段和常量一樣是只讀的。
5、程序代碼區(qū):存放函數(shù)體的二進(jìn)制代碼。
6、bss段:定義而沒(méi)有賦初值的全局變量和靜態(tài)變量,放在這個(gè)區(qū)域,通常只是記錄變量名和大小,相當(dāng)于一個(gè)占位符。
參考別人的一段示例代碼:
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;//全局初始化區(qū)
8 int b=2;//全局初始化區(qū)
9 char *p;//全局未初始化區(qū)
10 char *p2;//全局未初始化區(qū),BSS段
11 int *p3;//全局未初始化區(qū) ,BSS段
12 int *p4;//全局未初始化區(qū) ,BSS段
13 char *p5={"555555555"};//全局初始化區(qū)
14
15 int main(){
16 static int c=3;
17 int d=4;//內(nèi)存棧
18 int e=7;//內(nèi)存棧
19
20 char *p6={"555555555"};
21 p=(char*)malloc(sizeof(char)*10);//內(nèi)存堆
22 p2=(char*)malloc(sizeof(char)*10);//內(nèi)存堆
23 p3=(int*)malloc(sizeof(int));//內(nèi)存堆
24 p4=(int*)malloc(sizeof(int)*10);//內(nèi)存堆
25 for(int i=0;i<=9;i++)p4[i]=0x1;
26
27
28 *p3=0x123;
29 strcpy(p,"123456789");//文字常量區(qū)
30 strcpy(p2,"987654321");
31 strcpy(p2,"123456789");
32 }
View Code
總結(jié)
以上是生活随笔為你收集整理的Text段、Data段和BSS段的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: LInux学习笔记(四)-----实操排
- 下一篇: Java基础——Java异常处理机制