• C语言进阶之路(一)----C语言的内存四区模型


    内存四区模型:
    操作系统给C/C++编写的程序分配内存,通常将分配的内存划分为以下四个区域:
    1.栈区:存放局部变量,用完由操作系统自动释放
    2.堆区:动态分配给程序的内存区域,由程序员手动释放
    3.数据区:
    分为两种:
    (1)常量区:存放常量,一般是字符串常量
    (2)全局区/静态区:存放全局变量和静态变量
    4.代码区:
    存放可执行代码的区域

    示例如下:

     1 int main()
     2 {
     3     char buf1[10] = "aaaa";
     4 
     5     char buf2[] = "bbbb";
     6 
     7     char *p1 = "1111";
     8 
     9     //动态分配内存
    10     char *p2 = (char *)malloc(10*sizeof(char));
    11 
    12     strcpy(p2, "3333");
    13 
    14     return 0;
    15 }

    内存四区图:

     

     补充:

    栈的生长方向和数组内元素的存放方向相反
    堆的生长方向和数组内元素的存放方向相同

    验证:

     1 #include <stdio.h>
     2 
     3 int main()
     4 {
     5     char buf1[10] = "aaaa";
     6     char buf2[] = "bbbb";
     7     char *p1 = "1111";
     8     //动态分配内存
     9     char *p2 = (char *)malloc(10 * sizeof(char));
    10     strcpy(p2, "3333");
    11 
    12     printf("buf1的地址是%d
    ", buf1);
    13     printf("buf1的地址是%d
    ", buf2);
    14 
    15     printf("======================
    ");
    16 
    17     printf("buf[0]的地址是%d
    ", &buf1[0]);
    18     printf("buf[0]的地址是%d
    ", &buf1[1]);
    19 
    20     printf("======================
    ");
    21 
    22     printf("p2[0]的地址是%d
    ", &p2[0]);
    23     printf("p2[1]的地址是%d
    ", &p2[1]);
    24 
    25     return 0;
    26 }

    打印结果:

    说明栈的生长方向是向下的,数值逐渐减小;栈中数组的元素的存放方向与之相反,是向上的,数值逐渐增大;堆的生长方向向上,数值逐渐增大。

  • 相关阅读:
    云计算架构
    Java多线程中static变量的使用
    Spring单例与线程安全小结
    sparkSQL实战详解
    sparkSQL整体实现框架
    spark架构
    如何快速定位出一个IP地址的归属地?——二分查找变体
    如何在 1000 万个整数中快速查找某个整数?——二分查找
    语言库中常用的排序算法qsort()底层结构
    链表常考笔试面试题(常备)
  • 原文地址:https://www.cnblogs.com/crazyzhang/p/5727822.html
Copyright © 2020-2023  润新知