c/c++程式設計中,經常需要操作的記憶體分為以下幾類:
棧區(stack):用於存放程式臨時建立的區域性變數,如函式的引數值、區域性變數值等,由編譯器自動分配釋放。
堆區(heap):一般由程式設計師申請和釋放。用於存放程序執行中被動態分配的記憶體段,大小不固定,可動態擴張或縮減。若程式設計師不釋放,程式結束時,可能由作業系統**,但最好還是由程式設計師釋放。注意:它與資料結構中的堆是兩回事,分配方式類似資料結構中的鍊錶。
全域性區(靜態區static):全域性變數和靜態變數的儲存是放在一起的。初始化的全域性變數和靜態變數在一塊區域,未初始化的全域性和未初始化的靜態在鄰近的另一塊區域。程式結束後由系統釋放。
文字常量區:存放字串常量,程式結束後由系統釋放。
程式**區:存放函式體內的二進位制**。
heap和stack的區別?
答:1)heap是堆,stack是棧。堆一般由程式設計師手動分配釋放,棧是由作業系統自動分配釋放。
2)stack的空間有限,在window下,棧是向低位址擴充套件的資料結構,是一塊連續的記憶體區域,大小一般為2m;堆是向高位址擴充套件的資料結構,是不連續的記憶體區域,因為由系統用鍊錶來儲存空閒記憶體空間,堆的大小取決於系統的有效虛擬記憶體,有很大的自由儲存區。
3)stack由系統自動分配,速度較快。heap由new分配,一般速度比較慢,而且容易產生記憶體碎片。
記憶體管理分類
在編寫程式過程中,程式設計師必須清楚程式記憶體的分配機制,合理進行記憶體管理,這樣才能得到高效的程式。同時,如果對c 記憶體分配基本概念不理解,使用不當,一方面浪費了寶貴的記憶體資源,降低了程式執行效率,另一方面還會造成程式中意想不到的錯誤。在c 程式中,把記憶體分為4 類,程式儲存區 靜態資料儲存...
記憶體的分類
記憶體分類 dram dynamic random access memory 即動態 隨機訪問儲存器 最為常見的 系統記憶體 dram 只能將資料保持很短的時間。為了保持資料,dram使用電容儲存,所以必須隔一段時間重新整理 refresh 一次,如果 儲存單元 沒有被重新整理,儲存的資訊就會丟失...
GPU記憶體分類
全域性記憶體 通俗意義上的裝置記憶體。共享記憶體 1.位置 裝置記憶體。2.形式 關鍵字 shared 新增到變數宣告中。如 shared float cache 10 3.目的 對於gpu上啟動的每個執行緒塊,cuda c編譯器都將建立該共享變數的乙個副本。執行緒塊中的每個執行緒都共享這塊記憶體,...