news 2026/4/22 18:44:25

内存四区模型详解(栈、堆、全局、常量)

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
内存四区模型详解(栈、堆、全局、常量)

一、程序运行时内存分为 4 个区

C++ 在程序运行时,会把内存划分为四个区域,不同区域存放不同数据,生命周期和管理方式也不同:

  1. 代码区
  2. 全局区 / 静态区
  3. 栈区
  4. 堆区

二、1. 代码区

  • 存放程序编译后的二进制机器指令
  • 特点:共享、只读
  • 作用:防止程序被恶意修改、多次运行共用一份代码
  • 我们一般不需要操作这里

三、2. 全局区(全局 / 静态变量区)

存放:

  • 全局变量
  • 静态变量 static
  • 常量区(字符串常量、const 全局变量)

特点:

  • 程序启动时创建,程序结束时由操作系统释放
  • 未初始化的变量会自动清 0

示例:

#include <iostream> using namespace std; // 全局变量 → 全局区 int g_a = 10; // 静态全局变量 → 全局区 static int g_s_b = 20; int main() { // 字符串常量 → 常量区(全局区一部分) cout << "hello" << endl; }

四、3. 栈区(stack)

存放:

  • 函数内的局部变量
  • 函数形参
  • 函数调用现场

特点:

  • 编译器自动分配、自动释放
  • 空间小、分配速度快
  • 先进后出(栈结构)
  • 函数结束,变量立即销毁

典型示例:

void func() { int a = 10; // 局部变量 → 栈区 char arr[] = "abc"; // 数组 → 栈区 }

⚠️ 重要坑点:不要返回栈区变量的地址!函数结束后内存已释放,地址变成野指针。


五、4. 堆区(heap)

存放:

  • new / malloc出来的动态数据

特点:

  • 程序员手动分配、手动释放
  • 空间大、灵活
  • 不主动释放会一直存在,直到程序结束
  • 容易产生内存泄漏

示例:

void func() { // 堆区 int *p = new int(10); }

释放:

delete p; p = nullptr;

六、四区总结对比(超清晰)

表格

区域存放内容分配释放生命周期
代码区二进制指令系统整个程序运行期
全局区全局 / 静态变量、常量系统整个程序运行期
栈区局部变量、形参编译器自动函数内
堆区new 动态数据手动 new/delete手动控制

七、经典面试题(必看)

1. 局部变量和全局变量区别?

  • 局部变量在栈区,函数结束销毁
  • 全局变量在全局区,程序结束销毁
  • 全局变量默认初始化为 0,局部变量是随机值

2. 为什么不能返回局部变量地址?

局部变量在栈区,函数结束就销毁,返回的地址变成野指针,访问会崩溃或乱码。

3. new 出来的数据在哪?

堆区,必须手动 delete,否则内存泄漏。


八、新手高频易错点

  1. 以为所有变量都在同一个地方
  2. 返回局部变量地址 / 引用,导致野指针
  3. 只 new 不 delete,造成内存泄漏
  4. 混淆栈区与堆区,导致程序莫名崩溃
  5. 以为静态变量和局部变量一样会自动销毁

九、今日重点总结

  1. C++ 内存四区:代码区、全局区、栈区、堆区
  2. 局部变量 → 栈(自动释放)
  3. 全局 / 静态变量 → 全局区(程序结束释放)
  4. new/malloc → 堆(手动释放)
  5. 严禁返回栈变量地址,堆内存必须配对释放
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/22 18:43:25

Qwen3.5-9B-GGUF效果展示:中文古诗续写与风格迁移生成作品

Qwen3.5-9B-GGUF效果展示&#xff1a;中文古诗续写与风格迁移生成作品 1. 模型介绍与部署概览 Qwen3.5-9B-GGUF是基于阿里云开源的Qwen3.5-9B模型经过GGUF格式量化后的版本。这个90亿参数的稠密模型采用了创新的Gated Delta Networks架构和混合注意力机制&#xff08;75%线性…

作者头像 李华
网站建设 2026/4/22 18:38:06

Docker守护进程在高温车间宕机?嵌入式ARM64平台下温度感知自愈机制(含Linux thermal subsystem定制补丁)

第一章&#xff1a;Docker工业级高可靠性设计综述在大规模生产环境中&#xff0c;Docker 不仅是容器化工具&#xff0c;更是支撑云原生系统可靠运行的基础设施组件。工业级高可靠性设计要求容器平台在节点故障、网络分区、镜像损坏、资源争用等异常场景下仍能维持服务连续性、状…

作者头像 李华
网站建设 2026/4/22 18:37:22

Snowflake Arctic模型:SQL与代码生成的优化实践

1. Snowflake Arctic模型&#xff1a;专为SQL与代码生成优化的企业级大语言模型在AI领域&#xff0c;大语言模型&#xff08;LLMs&#xff09;正以前所未有的速度重塑技术格局。作为一名长期跟踪AI技术落地的从业者&#xff0c;我最近深度测试了Snowflake最新开源的Arctic模型—…

作者头像 李华
网站建设 2026/4/22 18:34:27

从NSGA-II到RVEA:在platEMO中探索多目标进化算法的20年演进史

从NSGA-II到RVEA&#xff1a;多目标进化算法的思想演进与技术突破 在解决工程优化、金融建模和人工智能等领域的复杂问题时&#xff0c;我们常常需要同时权衡多个相互冲突的目标。传统单目标优化方法对此束手无策&#xff0c;而多目标进化算法(MOEA)通过模拟生物进化过程&…

作者头像 李华