內存佈局:棧,堆,BSS段(靜態區),代碼段,數據段

 簡介數據結構

         咱們程序運行的時候都是放在內存裏的、根據靜態、成員函數、代碼段、對象、等等、放在不一樣的內存分塊裏、大概分爲5塊架構

         1  棧框架

         2  堆函數

         3 BSS段-全局區-(靜態區)優化

         4 代碼段 spa

         5 數據段.net

 棧3d

         存放局部變量、臨時變量、聲明、返回值、指向堆對象的地址(指針)、總之存放一些小的東西、當不須要時候、棧會自動清除、好比一個加法方法裏面、聲明瞭兩個int並賦值、這兩個就是放在棧裏面、類裏面的8個基本變量常量類型、聲明賦值之後都會在棧裏、其餘的放在堆裏。注:(byte、short、int、long、char、float、double、boolean)(據說跟數據結構的棧很像、可是我學數據結構的時候其實就想到了這個棧)指針

 堆code

         存放new出來的對象、棧裏面全部對象都是在堆裏面有指向的、假如棧裏指向堆的指針被刪除、堆裏的對象也要釋放(C++須要手動釋放)、固然咱們如今好面向對象程序都有'垃圾回收機制'、會按期的把堆裏沒用的對象清除出去。

 代碼段

         存放程序執行代碼的一塊內存區域、裏面是二進制的代碼、內存區域一般屬於只讀, 某些架構也容許代碼段爲可寫,其實就是存放代碼框架、或者說函數體、代碼體的地方。

 BSS段-全局區-(靜態區)

         上邊是三個名字- -、找到的、差很少就那個意思、這個BSS段、就是存放爲初始化的全局變量與未初始化的靜態變量。

 數據段

         BSS段的是未初始化的、這個就像接他的班、數據段存放已初始化的全局變量和靜態變量。

Data

         BSS+數據段、包含這兩個區段的叫數據區……其實我也不是很懂、大概就是BSS+數據段就叫Data區、就像   火燒+肉=火燒夾肉……

 思惟導圖

 

 例子程序

這是一個前輩寫的,很是詳細

 

//main.cpp
 
int a = 0;   // 數據段
 
char *p1; // BSS段
 main() { int b; //
 
char s[] = "abc";//
 
char *p2;//
 
char *p3 = "123456"; // 123456\0在常量區,p3在棧上。
 
static int c =0// BSS段
 Class c1 = new Class();//new出的對象就在堆區
 strcpy(p1, "123456"); //123456\0放在常量區,編譯器可能會將它與p3所指向的"123456"優化成一個地方。
 } 

 

原文連接:連接

相關文章
相關標籤/搜索