深入理解C/C++内存管理:栈区与堆区的奥秘 - 指南
资料合集下载链接:
https://pan.quark.cn/s/472bbdfcd014
今天,让大家来聊一个编程中的核心话题——内存管理。无论你是刚入门的编程新手,还是经验丰富的老手,深刻理解程序是如何使用内存的,都是编写高效、稳定代码的关键。最近我整理了一份关于内存分区的课堂笔记,今天就以它为蓝本,带大家深入探索内存的几大区域,特别是栈(Stack)和堆(Heap)这两个“相爱相杀”兄弟。
程序运行时的内存“四大金刚”
当我们编译并运行一个程序时,操作系统会为该程序分配一块专属的内存空间。这块空间并不是一个混沌的整体,而是被精心划分为几个主要区域,各司其职:
- 1. 代码区 (Code Segment):
- • 存放内容:我们编写的工具指令(编译后的二进制代码)。
- • 特点:只读,防止程序意外修改了它的指令;共享,对于频繁被执行的程序,内存中只需要一份代码区副本。
- 2. 数据区 (Data Segment):
- • 存放内容:全局变量、静态变量和常量。
- • 特点:在程序运行前就已经分配好,并且在整个工具生命周期内都存在。它又可以细分为:
- • 全局初始化区:存放已初始化的全局变量和静态变量。
- • 全局未初始化区 (BSS):存放未初始化的全局变量和静态变量,程序运行前会自动清零。
- 3. 栈区 (Stack Area):
- • 存放内容:函数的参数值、局部变量、函数调用的返回地址等。
- • 特点:由编译器自动分配和释放,效率高,但容量有限。
- 4. 堆区 (Heap Area):
- • 存放内容:由程序员动态申请的内存。
- • 特点:容量巨大,但应该程序员手动通过
浙公网安备 33010602011771号