深圳手机网站制作,湖南城乡建设厅官方网站,国内机械加工企业排名,网站群发手机短信目录
前言#xff1a;
一#xff1a;C语言中区域划分的回顾及各个变量存在的位置
1.经典例题
编辑2.C/C中内存区域的划分
二#xff1a;C内存管理方式 new delete操作符
1.对于内置类型
2.对于自定义类型
三#xff1a;operator new和operator delete函数
1…目录
前言
一C语言中区域划分的回顾及各个变量存在的位置
1.经典例题
编辑2.C/C中内存区域的划分
二C内存管理方式 new delete操作符
1.对于内置类型
2.对于自定义类型
三operator new和operator delete函数
1.new和delete的底层实现原理
2.new 和delete对内置类型和自定义类型处理的底层原理
1.对于内置类型
2.对于自定义类型
1.new的原理
2.delete的原理
3.new[N]的原理
4.delete[]的原理
四定位new表达式placement-new
1.概念
五malloc/free和new/delete的区别 接下来的日子会顺顺利利万事胜意生活明朗-----------林辞忧
前言
在C/C中,对于要开辟和释放动态的内存空间在C语言中常常使用malloc,calloc,realloc,free四大函数来完成而在C中就会使用new和delete来完成动态内存空间的申请释放而C兼容C语言所以也可以使用四大函数但注意free和delete不能混着用尽量匹配使用的
一C语言中区域划分的回顾及各个变量存在的位置
1.经典例题 2.C/C中内存区域的划分 二C内存管理方式 new delete操作符
1.对于内置类型 我们可以发现对于malloc和new申请的空间都不会完成初始化所以对于内置类型new和malloc差不多那么在C中要想完成初始化的话就得使用calloc函数C中也可以完成初始化 开辟多个并初始化 2.对于自定义类型 三operator new和operator delete函数
1.new和delete的底层实现原理
1.new和delete是用户用来动态内存申请和释放的操作符operator new和operator delete是系统提供的全局函数而new在底层是调用operator new全局函数来实现动态申请空间的delete在底层是调用operator delete 全局函数来实现动态内存空间的释放的
2.operator new全局函数该函数实际是通过malloc来申请空间的当malloc申请空间成功时直接返回申请失败时抛异常
3.operator delete全局函数是通过free来释放空间的
2.new 和delete对内置类型和自定义类型处理的底层原理
1.对于内置类型
malloc free和 new delete基本相同不同的是 new delete申请和释放的是单个元素的空间new[],delete[]申请的是一块连续的空间new失败时抛异常而malloc失败时返回NULL
2.对于自定义类型
1.new的原理 1.调用operator new函数申请空间 2.在申请空间时自动调用构造函数
2.delete的原理
1.调用operator delete函数释放对象的空间
2.在空间上执行析构函数完成对象中资源的清理工作
3.new[N]的原理
1.调用operator new[]函数在operator new[]函数中调用N次operator new函数完成N个对象空间的申请
2.在申请的空间上执行N次构造函数
4.delete[]的原理
1.在释放的对象上调用执行N次析构函数完成N个对象中的资源清理工作
2..调用operator delete[]函数在operator delete[]函数中调用N次operator delete函数完成N个对象空间的释放
四定位new表达式placement-new
1.概念
定位new表达式是在已分配的原始内存空间中调用构造函数初始化一个对象 定位new表达式在实际中一般是配合内存池使用的内存池的内存是由操作系统的对上申请的内存池分配的内存没有初始化 如果是自定义类型就可以使用定位new表达式调用构造函数初始化
五malloc/free和new/delete的区别
共同点都是从堆上申请空间并且需要用户手动释放
不同点
1.malloc /free是函数new/delete是操作符
2.malloc申请的空间不会初始化new可以初始化
3.malloc申请空间时需要手动计算空间大小并传递new只需在其后跟上空间的类型即可如果是多个对象[]中指定对象的个数即可
4.malloc的返回值为void*,在使用时必须强转new不需要因为new后跟的是空间的类型
5.malloc申请空间失败时返回的是NULL,因此使用时必须判空new不需要但是new需要捕获异常
6.申请自定义类型对象时malloc/free只会开辟空间不会调用构造函数与析构函数而new在申请空间后会调用构造函数完成对象的初始化delete在释放空间前会调用析构函数完成空间中资源的清理