C語言的內存四區模型(C語言進階)

內存四區模型:
操作系統給C/C++編寫的程序分配內存,通常將分配的內存劃分爲以下四個區域:
1.棧區:存放局部變量,用完由操作系統自動釋放
2.堆區:動態分配給程序的內存區域,由程序員手動釋放
3.數據區:
分爲兩種:
(1)常量區:存放常量,一般是字符串常量
(2)全局區/靜態區:存放全局變量和靜態變量
4.代碼區:
存放可執行代碼的區域

示例如下:

int main()
{
    char buf1[10] = "aaaa";

    char buf2[] = "bbbb";

    char *p1 = "1111";

    //動態分配內存
    char *p2 = (char *)malloc(10*sizeof(char));

    strcpy(p2, "3333");

    return 0;
}

在這裏插入圖片描述
補充:

棧的生長方向和數組內元素的存放方向相反
堆的生長方向和數組內元素的存放方向相同

驗證:

#include <stdio.h>

int main()
{
    char buf1[10] = "aaaa";
    char buf2[] = "bbbb";
    char *p1 = "1111";
    //動態分配內存
    char *p2 = (char *)malloc(10 * sizeof(char));
    strcpy(p2, "3333");

    printf("buf1的地址是%d\n", buf1);
    printf("buf1的地址是%d\n", buf2);

    printf("======================\n");

    printf("buf[0]的地址是%d\n", &buf1[0]);
    printf("buf[0]的地址是%d\n", &buf1[1]);

    printf("======================\n");

    printf("p2[0]的地址是%d\n", &p2[0]);
    printf("p2[1]的地址是%d\n", &p2[1]);

    return 0;
}

打印結果:

在這裏插入圖片描述

說明棧的生長方向是向下的,數值逐漸減小;棧中數組的元素的存放方向與之相反,是向上的,數值逐漸增大;堆的生長方向向上,數值逐漸增大。

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