zl程序教程

您现在的位置是:首页 >  后端

当前栏目

【维生素C语言】第十四章 - 浅析C/C++程序的内存开辟

C++内存C语言程序 浅析 开辟 第十四章
2023-09-14 09:15:59 时间

前言: 

本篇博客旨在加深动态内存开辟的理解,以 C/C++ 程序的内存开辟为主题进行简要的分析。


C/C++ 程序内存分配的区域: 

1.栈区(stack)

执行函数时,函数内部局部变量的存储单元都可以在栈上创建。函数执行结束后这些存储单元会被自动释放。栈内存分配运算内置于处理器的指令集中,拥有很高的效率,但是分配的内存容量是有限的。栈区主要存放运行函数而分配的局部变量、函数参数、返回数据、返回地址等。

2.堆区(heap)

一般由程序员自主分配释放,若程序员不主动不释放,程序结束时可能由操作系统回收。其分配方式类似于链表。

3.数据段(data segment)

静态存储区,存放全局变量和静态数据,程序结束后由系统释放。

4.代码段(code segment)

存放函数体(类成员函数和全局函数)的二进制代码。

💬 内存区域划分图:

📚 我们在前几章讲过 static 关键字修饰局部变量,有了这幅图,我们可以更好地理解了:

🔑 实际上,普通的局部变量是在栈区分配空间的,在栈区上创建的变量,出了作用域就会销毁。但是,如果一个变量被 static 修饰,就会存放到数据段(静态区),而在数据段上创建的变量,直到程序结束才会销毁,所以生命周期因此而变长。

栈区的特点:在上面创建的变量出了作用域就销毁。

数据段的特点:在上面创建的变量直到程序结束才销毁


参考资料:

Microsoft. MSDN(Microsoft Developer Network)[EB/OL]. []. .

比特科技. C语言进阶[EB/OL]. 2021[2021.8.31]. .

📌 本文作者: 王亦优

📃 更新记录: 2021.8.11 

❌ 勘误记录: 无

📜 本文声明: 由于作者水平有限,本文有错误和不准确之处在所难免,本人也很想知道这些错误,恳望读者批评指正!

本章完。