[重新认识 C++] 内存管理笔记 1 - 五大存储区域

yufei       3 年, 1 月 前       649

C++ 语言 把内存分为5大区域:

  1. 栈(Stack) 内存区:

    • 栈主要存储 局部变量函数参数

    • 该存储区由 编译器 自动分配和释放。

    • 内存区域的 进栈出栈 有相应的 计算机指令 支持。

    • 有专门的 寄存器 存储栈的地址,效率高。

    • 栈内存区域的内存空间是连续的。

    • 但栈也有局限,就是内存空间有限。

    • 也是计算机系统的数据结构之一。

  2. 堆(Heap) 内存区:

    • 程序员使用 new 关键字手动创建和使用 delete 关键字手动释放,属于动态分配。

    • 堆的内存空间不连续,会产生碎片。

    • 堆的内存空间趋近于无限,主要受物理内存条本身大小限制。

    • 操作系统有一个记录未分配的内存空间的链表,当收到内存申请(new 关键字)时会遍历链表,找到第一个空间大于申请空间的堆节点,将该节点分配给程序并将该节点从链表中删除。

    • 当分配内存空间时,一般会在该内存空间的首地址处记录本次分配的内存大小。

  3. 全局/静态区

    • 存储 全局变量静态变量

    • 该区域的变量会在程序结束后自动释放。

    • 该区域又分为 DATA(全局初始化区)BBS(全局未出初始化) 两段。

      • 已经初始化的全局变量和静态变量存放在 DATA 段。

      • 未出实话的全局变量和静态变量存放在 BBS 段。

      • BBS 段会在程序执行前自动清零。因为这个特性,所以未初始化的全局变量和静态变量会自动初始化为 0 (不是数字0,而是对应的数据类型的空值)。

  4. 文字常量区

    • 存放常量,且不能修改。

    • 程序结束后自动释放。

  5. 程序代码区

    • 存放程序的二进制代码。

习题

const 关键字的变量存储在哪个区域 ?

目前尚无回复
简单教程 = 简单教程,简单编程
简单教程 是一个关于技术和学习的地方
现在注册
已注册用户请 登入
关于   |   FAQ   |   我们的愿景   |   广告投放   |  博客

  简单教程,简单编程 - IT 入门首选站

Copyright © 2013-2022 简单教程 twle.cn All Rights Reserved.