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


 簡介

         我們程序運行的時候都是放在內存里的、根據靜態、成員函數、代碼段、對象、等等、放在不同的內存分塊里、大概分為5塊

         1  棧

         2  堆

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

         4 代碼段 

         5 數據段

 棧

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

 堆

         存放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"優化成一個地方。
 
} 

 

原文鏈接:鏈接

 


免責聲明!

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



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