C/C++中特別注重的是數據存儲,這就與內存分不開,我們想要知道C/C++如何進行數據存儲,就必須瞭解它們的內存分佈。
先來看一段代碼:
int globalVar = 1;
static int staticGlobalVar = 1;
void Test()
{
static int staticVar = 1;
int localVar = 1;
int num1[10] = {1, 2, 3, 4};
char char2[] = "abcd";
char* pChar3 = "abcd";
int* ptr1 = (int*)malloc(sizeof (int)*4);
int* ptr2 = (int*)calloc(4, sizeof(int));
int* ptr3 = (int*)realloc(ptr2, sizeof(int)*4);
free (ptr1);
free (ptr3);
}
這段代碼裏的數據在內存中是如何分佈和存儲的呢?結合以前的知識我們可以總結到如下圖所示:
【總結】
1. 棧又叫堆棧,非靜態局部變量/函數參數/返回值等等,棧是向下增長的。
2. 內存映射段是高效的I/O映射方式,用於裝載一個共享的動態內存庫。用戶可使用系統接口創建共享共享內存,做進程間通信。
3. 堆用於程序運行時動態內存分配,堆是可以上增長的。
4. 數據段--存儲全局數據和靜態數據。
5. 代碼段--可執行的代碼/只讀常量。