• C++内存分区模型


    参考至:C + + memory partition model (programs.team)

    一、内存分区简介

    1.1 内存分区

    在执行c++程序的过程中,内存会被大致分为四块区域:

    1> 代码区域:存储二进制代码,由操作系统管理。

    2> 全局区域:存储全局变量、静态变量、常量。

    3> 栈区域:存储局部变量、参数值等。由编译器自动分配和释放。

    4> 堆区域:该区域由程序员开辟和释放。如果程序员未释放相应的内存,在程序结束的时候操作系统会将其回收释放。

    1.2 内存分区的意义

     数据存储在不同的区域拥有不同的生命周期,使我们的程序灵活易用。

    二、程序运行各阶段的内存分配

    2.1 程序运行前

     在程序编译完成后,会生成一个可执行文件。在程序执行之前,主要分为两块区域:

    1> 代码区域:存储由CPU执行的机器指令。

    代码区域是共享的、只读的。共享的目的是为了在频繁执行程序的时候只有一份代码在内存中;只读的目的是为了防止程序意外的修改其机器指令。

    2> 全局区域:全局和静态变量存储在此区域。

    该区域还包含了存储着字符串常量和其他常量的常量区域

    该区数据会在程序结束时被操作系统释放。

    2.2 程序运行期间

     程序运行期间,主要是栈区和堆区在不断的开辟和释放:

    1> 栈区域:编译器分配和释放用来存储函数内的局部变量和函数参数。

    切记不可返回函数内的栈区局部变量地址到函数外,因为该区的生命周期是不可控的、短暂的,会出现非法操作。

    2> 堆区域:程序员手动开辟和释放,如果程序员不对其进行释放,程序结束后,操作系统会对其释放。

    在堆区开辟内存使用运算符:new

    在堆区释放内存使用运算符:delete

    一直不释放堆区无效内存,会导致堆区内存不断增大、内存碎片化、内存泄漏,影响效率。

    2.3 程序运行结束后

    操作系统会释放未释放的内存。

    三、关于变量的一些知识

    1. /*
    2. * @brief 有以下程序,用以说明变量的一些知识
    3. */
    4. /*
    5. *@brief 定义 向程序表明变量的类型和名字并分配地址
    6. * 或者向程序表明函数的名字、参数、返回值以及具体实现
    7. * 只要分配了地址,就是定义!
    8. * 定义只可发生一次,即相同类型、名字的变量只可定义一次
    9. */
    10. //定义,定义一个全局变量,类型为int,并且将其初始化为10,存储在全局区域
    11. int num = 10;
    12. //定义,定义一个函数,参数有一个,类型为int,该参数会开辟在栈区域;返回值为bool类型
    13. bool Func(int a)
    14. {
    15. //定义,定义一个局部变量,类型为int,会开辟在栈区域
    16. int num;
    17. return true;
    18. }
    19. //定义,定义一个静态变量,类型为double,存储在全局区域(静态区)
    20. static double num2;
    21. /*
    22. *@brief 声明 向程序表明变量的类型和名字或者向程序表面函数的名字、参数、返回值
    23. */
    24. //声明,不是定义,声明了在其他文件定义了全局变量num,在此文件可以直接使用
    25. extern int num;
    26. //声明,不是定义,声明了在其他文件定义了全局函数max,在此文件可以直接使用
    27. extern double max(double d1,double d2);

    以上整理,可能存疑有错,仅用于个人知识总结,请谨慎参考。如有错误,欢迎指正。

  • 相关阅读:
    Java分库分表/读写分离
    vue学习-10vue整合SpringBoot跨域请求
    前端例程20220818:边框跑马霓虹灯效按钮
    RTT学习笔记10- 设备IPC 完成量-ringbufffer-workwueue
    集合篇---Queue集合
    css知识学习系列(9)-每天10个知识点
    k8s以及prometheus
    LeetCode--1991.找到数组的中间位置
    XSS脚本(存储型xss获取肉鸡的cookies)
    JudgeOpen整理
  • 原文地址:https://blog.csdn.net/weixin_43387492/article/details/128086529