代碼區(qū):存放函數(shù)體的二進(jìn)制代碼,由操作系統(tǒng)進(jìn)行管理
全局區(qū):存放全局變量和靜態(tài)變量稼稿,以及常量(字符串常量以及其他常量)
棧區(qū):由編譯器自動(dòng)分配釋放苔咪,存放函數(shù)的參數(shù)值已维,局部變量等
堆區(qū):由程序員分配釋放淆攻,若程序員沒(méi)有釋放阔墩,程序結(jié)束時(shí)由系統(tǒng)回收
意義:賦予不同的生命周期
程序編譯后運(yùn)行前嘿架,分為代碼區(qū)和全局區(qū)
代碼區(qū)特點(diǎn)是:共享性(對(duì)于頻繁被執(zhí)行的程序瓶珊,在內(nèi)存中只有一份代碼即可)块攒,只讀性(防止程序被篡改)
全局區(qū)在程序執(zhí)行完由操作系統(tǒng)釋放
程序運(yùn)行之后有棧區(qū)和堆區(qū)
棧區(qū):因?yàn)榫植孔兞吭诤瘮?shù)運(yùn)行完之后就會(huì)被釋放掉蔑歌,所以不要打印局部變量的地址值
如:
#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");
}
運(yùn)行結(jié)果
微信圖片_20200313115631.png
堆區(qū):
可以利用new關(guān)鍵字,將數(shù)據(jù)開(kāi)辟到堆區(qū)护奈。最后由程序員釋放
例:int *p=new int(10);
所以上邊的例子蝉娜,可以這樣寫(xiě)
#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唱较;