一個由C/C++編譯的程式占用的記憶體分為以下幾個部分:
(1)棧區(stack):由編譯器自動配置設定釋放,速度較快,存放函數的參數值、局部變量的值等。其操作方式類似于資料結構中的棧。
(2)堆區(heap):一般由程式員配置設定釋放,速度較慢,由new配置設定的記憶體,若程式員不釋放,程式結束時可能由OS回收。
(3)全局區(靜态區)(static):全局變量和靜态變量的存儲是放在一起的,初始化的全局變量和靜态變量在同一區域,未初始化的全局變量和未初始化的靜态變量在相鄰的一塊區域。程式結束後由系統釋放。
(4)文字常量區:常量字元串是放在這裡的,程式結束後由系統釋放。
(5)程式代碼區:存放函數的二進制代碼
例子程式 一個前輩寫的,非常詳細
//main.cpp
int a=0; //全局初始化區
char *p1; //全局未初始化區
main()
{
intb;棧
char s[]="abc"; //棧
char *p2; //棧
char *p3="123456"; //123456\0在常量區,p3在棧上。
static int c=0; //全局(靜态)初始化區
p1 = (char*)malloc(10);
p2 = (char*)malloc(20); //配置設定得來得10和20位元組的區域就在堆區。
strcpy(p1,"123456"); //123456\0放在常量區,編譯器可能會将它與p3所向"123456"優化成一個地方。
}