【C++】C/C++的內存分佈

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. 代碼段--可執行的代碼/只讀常量。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章