代碼區(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;