簡介
我們程序運行的時候都是放在內存里的、根據靜態、成員函數、代碼段、對象、等等、放在不同的內存分塊里、大概分為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區、就像 火燒+肉=火燒夾肉……
思維導圖
例子程序
這是一個前輩寫的,非常詳細
原文鏈接:鏈接