C++ -- 内存管理

C++ --内存管理

  • [1. C/C++内存分布](#1. C/C++内存分布)
  • [2. C中动态内存管理](#2. C中动态内存管理)
  • [3. C++中动态内存管理](#3. C++中动态内存管理)
  • [4. 面对自定义类型](#4. 面对自定义类型)
  • [5. operator new和operator delete](#5. operator new和operator delete)
  • [6. new和delete的实现原理](#6. new和delete的实现原理)
    • [6.1 内置类型](#6.1 内置类型)
    • [6.2 自定义类型](#6.2 自定义类型)
  • [7. 定位new(placement new)](#7. 定位new(placement new))
    • [7.1 底层机制](#7.1 底层机制)
    • [7.2 本质](#7.2 本质)

1. C/C++内存分布

2. C中动态内存管理

C中动态内存管理

3. C++中动态内存管理

区别于C中多样的方式,如malloc、calloc和realloc,以及释放内存的free,C++中常用的动态内存管理方式是new和delete。

使用的方法也很简单

cpp 复制代码
int main()
{
	int* p1 = new int(4);
	int* p2 = new int[10] { 1, 2, 3, 4 };// 创建连续空间
	// 初始化与否取决于你

	delete p1;
	delete[] p2;// 释放时最好匹配

	return 0;
}

new除了用起来方便和malloc用法上没什么区别,不同的是new可以初始化参数而malloc只能手动初始化。

4. 面对自定义类型

在面对自定义类型时,new和delete会自动调用构造函数和析构函数。如果一次性创建了多个自定义类型,创建了几个就会调用几次构造函数和析构函数。

5. operator new和operator delete

new和delete是操作符,operator new和operator delete是操作系统提供的全局函数。new在底层调用operator new全局函数来申请空间,delete在底层通过operator delete全局函数来释放空间。operator new 实际也是通过malloc来申请空间 ,如果用户提供该措施就继续申请,否则就抛异常。operator delete 最终是通过free来释放空间的

6. new和delete的实现原理

6.1 内置类型

new和malloc,delete和free基本类似,不同的地方是:new/delete申请和释放的是单个元素的空间,new[]和delete[]申请的是连续空间,而且new在申请空间失败时会抛异常,malloc会返回NULL。

6.2 自定义类型

new的原理

先调用operator new开辟空间,再调用构造函数在这块空间上完成构造。

delete的原理

先调用析构函数释放空间上的资源,再调用free释放这块空间。

7. 定位new(placement new)

定位new是在已开辟的空间上调用构造函数初始化一个对象。核心作用是将对象构造与内存分配解耦,适用于需要精确控制内存布局或优化性能的场景。

7.1 底层机制

与普通new的区别:

定位new跳过operator new开辟空间,直接调用构造函数。

7.2 本质

定位new本质是operator new的重载版本,接受额外参数(地址)。

相关推荐
好奇龙猫15 分钟前
【AI学习-comfyUI学习-第三十节-第三十一节-FLUX-SD放大工作流+FLUX图生图工作流-各个部分学习】
人工智能·学习
saoys23 分钟前
Opencv 学习笔记:图像掩膜操作(精准提取指定区域像素)
笔记·opencv·学习
电子小白1232 小时前
第13期PCB layout工程师初级培训-1-EDA软件的通用设置
笔记·嵌入式硬件·学习·pcb·layout
恋爱绝缘体12 小时前
2020重学C++重构你的C++知识体系
java·开发语言·c++·算法·junit
唯情于酒2 小时前
Docker学习
学习·docker·容器
Z1Jxxx2 小时前
加密算法加密算法
开发语言·c++·算法
乌萨奇也要立志学C++2 小时前
【洛谷】递归初阶 三道经典递归算法题(汉诺塔 / 占卜 DIY/FBI 树)详解
数据结构·c++·算法
️停云️3 小时前
【滑动窗口与双指针】不定长滑动窗口
c++·算法·leetcode·剪枝·哈希
charlie1145141913 小时前
嵌入式现代C++教程: 构造函数优化:初始化列表 vs 成员赋值
开发语言·c++·笔记·学习·嵌入式·现代c++
IT=>小脑虎4 小时前
C++零基础衔接进阶知识点【详解版】
开发语言·c++·学习