您好,登錄后才能下訂單哦!
本篇內(nèi)容主要講解“C++中內(nèi)存分區(qū)及作用是什么”,感興趣的朋友不妨來看看。本文介紹的方法操作簡單快捷,實用性強。下面就讓小編來帶大家學習“C++中內(nèi)存分區(qū)及作用是什么”吧!
也稱為代碼段,存放程序代碼。在程序編譯以后,代碼被編譯成機器碼,并保存在Text Segment中。它通常是只讀的,防止程序出現(xiàn)意外的修改。同時,代碼段也是可共享的。多個相同的程序可共享同一份代碼,從而節(jié)省內(nèi)存空間。
也稱為靜態(tài)數(shù)據(jù)區(qū),存放定義的全局變量、靜態(tài)變量等數(shù)據(jù)。數(shù)據(jù)區(qū)也分為兩個部分,即初始化數(shù)據(jù)段和未初始化數(shù)據(jù)段。初始化數(shù)據(jù)段存放已經(jīng)初始化過的全局變量和靜態(tài)變量。未初始化數(shù)據(jù)段存放未經(jīng)初始化的全局變量和靜態(tài)變量,該區(qū)域的值默認為0。
棧區(qū)存放函數(shù)調(diào)用時的局部變量、參數(shù)等數(shù)據(jù),系統(tǒng)根據(jù)函數(shù)調(diào)用的嵌套情況來自動管理棧區(qū)。當一個函數(shù)被調(diào)用時,函數(shù)的參數(shù)和返回地址被壓入棧中,然后分配一定的??臻g存儲局部變量。當函數(shù)返回時,返回值和之前壓入棧中的返回地址被取出,棧空間被釋放。在棧區(qū)分配變量和空間時,會從高地址往低地址分配內(nèi)存。這是因為棧區(qū)存儲數(shù)據(jù)的方式類似于數(shù)據(jù)的堆疊,后壓入的數(shù)據(jù)會被放在先前數(shù)據(jù)的上面,而先壓入的數(shù)據(jù)會被放在下面。每次分配棧內(nèi)存時,棧指針會向下移動,每次釋放棧內(nèi)存時,棧指針會向上移動。(自頂向下分配內(nèi)存)
動態(tài)分配內(nèi)存的區(qū)域,程序員在程序運行時可以向操作系統(tǒng)申請一定大小的內(nèi)存。在堆區(qū)分配的內(nèi)存由程序員負責管理,使用完畢后,程序員需要調(diào)用釋放內(nèi)存系統(tǒng)來釋放內(nèi)存,以防止內(nèi)存泄漏的發(fā)生。在堆區(qū)分配內(nèi)存時,會從低地址往高地址分配,因為操作系統(tǒng)在分配空間時會記錄哪些空間已經(jīng)被分配出去。所以在分配時需要先查找堆區(qū)中未被分配的內(nèi)存空間,并且需要記錄本次分配所占用的空間大小和地址。(自底向上分配內(nèi)存)
//全局區(qū) int global_variable = 0;//全局變量 static int static_variable = 1;//靜態(tài)變量 const int global_const_variable = 10;//全局常量 int main() { //棧區(qū) int local_variable = 2; const int const_variable = 0; //堆區(qū) int* ptr = (int*)malloc(sizeof(int));//c語言形式在堆區(qū) 1 個 int 類型變量的內(nèi)存空間 free(ptr);// 釋放指針 ptr 指向的內(nèi)存空間 int* p = new int[10]; // C++在堆區(qū)申請 10 個 int 類型變量的內(nèi)存空間 delete[] p; // 釋放指針 p 指向的內(nèi)存空間 return 0; }
那么在編譯后,程序?qū)⒈粍澐譃樗膫€區(qū)域:
代碼區(qū):
存放main函數(shù)的機器碼。
全局區(qū):
存放定義的全局變量global_variable和靜態(tài)變量static_variable。其中,global_variable存放在初始化數(shù)據(jù)段,static_variable存放在未初始化數(shù)據(jù)段。
堆區(qū):
在程序運行過程中,可以使用malloc
或new
函數(shù)向堆區(qū)申請一定大小的內(nèi)存空間。
棧區(qū): 存放main函數(shù)的局部變量local_variable
、函數(shù)參數(shù)和返回地址等數(shù)據(jù)。
到此,相信大家對“C++中內(nèi)存分區(qū)及作用是什么”有了更深的了解,不妨來實際操作一番吧!這里是億速云網(wǎng)站,更多相關內(nèi)容可以進入相關頻道進行查詢,關注我們,繼續(xù)學習!
免責聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。