2025-03-20 08:03:42 +08:00

17 lines
1.5 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

## 说一下程序的内存分区?
内存分区,分别是堆、栈、自由存储区、全局/静态存储区、常量存储区和代码区。如下图所示
![1742371178414.jpg](https://img.picui.cn/free/2025/03/19/67da796af3c36.jpg)
**栈**:在执行函数时,函数内局部变量的存储单元都可以在栈上创建,函数执行结束时这些存储单元自动被释放。栈内存分配运算内置于处理器的指令集中,效率很高,但是分配的内存容量有限。
**堆**:就是那些由 `new`分配的内存块,他们的释放编译器不去管,由我们的应用程序去控制,一般一个`new`就要对应一个 `delete`。如果程序员没有释放掉,那么在程序结束后,操作系统会自动回收。
**自由存储区**如果说堆是操作系统维护的一块内存那么自由存储区就是C++中通过new和delete动态分配和释放对象的抽象概念。需要注意的是自由存储区和堆比较像但不等价。
**全局/静态存储区**全局变量和静态变量被分配到同一块内存中在以前的C语言中全局变量和静态变量又分为初始化的和未初始化的在C++里面没有这个区分了它们共同占用同一块内存区在该区定义的变量若没有初始化则会被自动初始化例如int型变量自动初始为0。
**常量存储区**:这是一块比较特殊的存储区,这里面存放的是常量,不允许修改。
**代码区**:存放函数体的二进制代码。