Text段、Data段和BSS段
生活随笔
收集整理的這篇文章主要介紹了
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
總結
以上是生活随笔為你收集整理的Text段、Data段和BSS段的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: LInux学习笔记(四)-----实操排
- 下一篇: 全球购骑士卡有用吗?绝对物超所值