c++ 程式在執行時,將記憶體劃分為4個區域:
1#:**區:存放函式體的二進位制**,由作業系統進行管理的。
存放cpu執行的機器指令,
**區是共享的,共享的目的是對於頻繁被執行的程式,只需要在記憶體中有乙份**就行了。
**區是唯讀的,使其唯讀的原因是防止程式意外修改了它的指令。
2#:全域性區:存放全域性變數和靜態變數以及常量。
全域性變數和靜態變數存放在這裡
全域性區還包含了常量區,字串常量和其他常量也在此存放
該區域的資料在程式結束後,作業系統釋放
1#,2#是程式執行前開闢的。
//全域性變數
int a1 = 10;
int b1 = 77;
//靜態變數
static int a2 = 10;
static int b2 = 77;
//常量
const int a3 = 10;
const int b3 = 77;
//int* fun(int a)
//堆區的記憶體位址的開闢和釋放
//new關鍵字,開闢堆區的位址
//delete 變數;
//delete 陣列名;
int main()
3#:棧區:由編譯器進行管理,自動分配釋放,存放函式的引數值,區域性變數等。
4#:堆區:由程式設計師分配和釋放,若程式設計師不釋放,程式結束時,由作業系統**。
不同區域存的資料,賦予不同的生命週期,使程式設計更加靈活。
C C 程式是如何分配記憶體的?
一 乙個c c 編譯的程式所占用的記憶體分為以下5部分 名稱英文 存放變數型別 分配方式 核心特點 棧區stack 函式的引數值,區域性變數等 程式執行時由編譯器自動分配,程式結束時由編譯器自動釋放。操作方式類似於資料結構中的棧 棧記憶體分配運算內置於處理器的指令集中,效率很高,但是分配的記憶體容量...
2 類在記憶體中是如何分配的
類在記憶體中是如何分配的 乙個類,有成員變數 靜態與非靜態之分 而成員函式有三種 靜態的 非靜態的 虛的。那麼這些個東西在記憶體中到底是如何分配的呢?1 c 中,應該是物件才會被分配記憶體空間吧?為什麼cobject記憶體大小剛好和兩個成員變數的大小之和一致!難道還沒例項化的時候,類就已經有了記憶體...
C 的記憶體分配
一 記憶體基本構成 可程式設計內存在基本上分為這樣的幾大部分 靜態儲存區 堆區和棧區。他們的功能不同,對他們使用方式也就不同。靜態儲存區 內存在程式編譯的時候就已經分配好,這塊內存在程式的整個執行期間都存在。它主要存放靜態資料 全域性資料和常量。棧區 在執行函式時,函式內區域性變數的儲存單元都可以在...