1. 程式人生 > >C++:五種內存分配區域

C++:五種內存分配區域

static 通過 stdlib.h 棧區 bsp lib [] 函數 delete

C/C++編譯的程序所占用內存區域一般分為以下5個部分: (1)棧區(stack):由編譯器自動分配和釋放,用來存放函數的參數、局部變量等。其操作方式類似於數據結構中的棧。 (2)堆區(heap):一般由程序員分配和釋放(通過malloc/free、new/delete),若程序員沒有釋放,則程序結束時由操作系統回收。它與數據結構中的堆是兩回事,分配方式類似於鏈表。 (3)全局/靜態區:全局變量和靜態變量的存儲是放在一塊的,初始化的全局變量和初始化的靜態變量在一塊區域,未初始化的全局變量和未初始化的靜態變量在相鄰的另一塊區域,程序結束後由操作系統回收。 (4)文字常量區:存放常量值,如常量字符串等,不允許修改,程序結束後由操作系統回收。 (5)程序代碼區:存放函數體的二進制代碼。

例子:

#include <stdlib.h>
#include <string.h>

int a = 0; // 全局初始化區
char* p1; // 全局未初始化區

int main() {
int a; // 棧區
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"優化成一個地方
return 0;
}

C++:五種內存分配區域