IT评测·应用市场-qidao123.com
标题:
【重学C++】01| C++ 如何进行内存资源管理?
[打印本页]
作者:
北冰洋以北
时间:
2023-5-20 21:16
标题:
【重学C++】01| C++ 如何进行内存资源管理?
文章首发
【重学C++】01| C++ 如何进行内存资源管理?
前言
大家好,我是只讲技术干货的会玩code,今天是【重学C++】的第一讲,我们来学习下C++的内存管理。
与java、golang等自带垃圾回收机制的语言不同,C++并不会自动回收内存。我们必须手动管理堆上内存分配和释放,这往往会导致内存泄漏和内存溢出等问题。而且,这些问题可能不会立即出现,而是运行一段时间后,才会暴露出现,排查也很困难。因此,了解和掌握C++中的内存管理技巧和工具是非常重要的,可以提高程序性能、减少错误和增加安全性。
内存分区
在C++中,将操作系统分配给程序的内存空间按照用途划分了
代码段、数据段、栈、堆
几个不同的区域,每个区域都有其独特的内存管理机制。
代码区
代码区是用于存储程序代码的区域,代码段在程序真正执行前就被加载到内存中,在程序执行期间,代码区内存不会被修改和释放。
由于代码区是只读的,所以会被多个进程共享。在多个进程同时执行同一个程序时,操作系统只需要将代码段加载到内存中一次,然后让多个进程共享这个内存区域即可。
数据段
数据段用于存储静态全局变量、静态局部变量和静态常量等静态数据。在程序运行期间,数据段的大小固定不变,但其内容可以被修改。按照变量是否被初始化。数据段可分为已初始化数据段和未初始化数据段。
栈
C++中函数调用以及函数内的局部变量的使用,都是通过栈这个内存分区实现的。栈分区由操作系统自动分配和释放,是一种"后进先出"的一种内存分区。每个栈的大小是固定的,一般只有几MB,所以如果栈变量太大,或者函数调用嵌套太深,容易发生栈溢出(stack overflow)。
先来一段示例代码,看看C++是如何使用栈进行使用栈来进行函数调用的。
[code]#include void inner(int a) { std::cout
欢迎光临 IT评测·应用市场-qidao123.com (https://dis.qidao123.com/)
Powered by Discuz! X3.4