日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 综合教程 >内容正文

综合教程

Text段、Data段和BSS段

發布時間:2023/12/13 综合教程 32 生活家
生活随笔 收集整理的這篇文章主要介紹了 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段的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。