c++ 內(nèi)存四區(qū)

代碼區(qū):存放函數(shù)體的二進制代碼,由操作系統(tǒng)進行管理
全局區(qū):存放全局變量和靜態(tài)變量,以及常量(字符串常量以及其他常量)
棧區(qū):由編譯器自動分配釋放,存放函數(shù)的參數(shù)值,局部變量等
堆區(qū):由程序員分配釋放,若程序員沒有釋放,程序結(jié)束時由系統(tǒng)回收

意義:賦予不同的生命周期

程序編譯后運行前,分為代碼區(qū)和全局區(qū)
代碼區(qū)特點是:共享性(對于頻繁被執(zhí)行的程序,在內(nèi)存中只有一份代碼即可),只讀性(防止程序被篡改)
全局區(qū)在程序執(zhí)行完由操作系統(tǒng)釋放
程序運行之后有棧區(qū)和堆區(qū)

棧區(qū):因為局部變量在函數(shù)運行完之后就會被釋放掉,所以不要打印局部變量的地址值
如:

#include<iostream>
using namespace std;

int *func() {
    int a = 10;
    return &a;
}

int  main() {
    int *p = func();
    cout << "*p" << *p << endl;
    cout << "*p" << *p << endl;
    system("pause");
}

運行結(jié)果


微信圖片_20200313115631.png

堆區(qū):
可以利用new關(guān)鍵字,將數(shù)據(jù)開辟到堆區(qū)。最后由程序員釋放
例:int *p=new int(10);

所以上邊的例子,可以這樣寫

#include<iostream>
using namespace std;

int *func() {
    int *a = new int(10);
    return a;
}

int  main() {
    int *p = func();
    cout << "*p" << *p << endl;
    cout << "*p" << *p << endl;
    system("pause");
}

輸出結(jié)果:


微信圖片_20200313115631.png

堆區(qū)內(nèi)存釋放:
delete p;

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

友情鏈接更多精彩內(nèi)容