【维生素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
❌ 勘误记录: 无
📜 本文声明: 由于作者水平有限,本文有错误和不准确之处在所难免,本人也很想知道这些错误,恳望读者批评指正!
本章完。
相关文章
- 【C/C++学院】0725-内存补码分析/补码原码实战/打印整数二进制数据/静态库说明
- 【C/C++学院】0724-堆栈简介/静态区/内存完成篇/多线程
- 【C/C++学院】0723-32位与64位/调戏窗口程序/数据分离算法/内存检索/二分查找法/myVC
- C++中的内存管理
- c++读取文件到vector
- C++ STL-vector
- C/C++每日一练(20230324)
- C/C++每日一练(20230222)
- C语言/C++常见习题问答集锦(二十七)
- 【华为云技术分享】技术干货丨通过wrap malloc定位C/C++的内存泄漏问题
- VS中c++文件调用c 函数 ,fatal error C1853 预编译头文件来自编译器的早期版本号,或者预编译头为 C++ 而在 C 中使用它(或相反)
- C++学习心得与c语言到c++衔接技巧
- 图说C++对象模型:对象内存布局详解 强烈推荐
- 50个c/c++源代码网站
- C++ close()关闭文件方法详解
- C++多继承时的对象内存模型
- C++友元函数和友元类(一)
- Ubuntu20.04下,qt交叉编译报错::15: warning: identifier ‘nullptr‘ is a keyword in C++11 [-Wc++0x-compat]
- C++里怎么样让类对象删除时自动释放动态分配的内存?
- 使用Windbg定位Windows C++程序中的内存泄露
- C++堆内存错误:C运行时库检测到向堆内存头部写入了内容
- C++ 堆和栈 内存
- C++中的异常处理(中)
- 【高级C】GNU C/C++ 内联汇编——Intel与ATT汇编语法对比
- 第十三届蓝桥杯C++B组国赛H题——机房 (AC)
- 从C和C++内存管理来谈谈JVM的垃圾回收算法设计-下
- 【C++提高】const_cast<>() 去除变量的只读属性
- C++堆内存错误:CRT detected that the application wrote to memory after end of heap buffer