当前位置: 首页 > news >正文

最早做弹幕的网站百度问问首页

最早做弹幕的网站,百度问问首页,山东公司网页定制,wap手机网站开发asp经验文章目录 new 和 delet 概念new 和 delet 的使用new与 delete 底层原理malloc/free和new/delete的区别new / opera new / 构造函数 之间的关系定位new表达式(placement-new)内存泄漏内存泄漏分类如何对待内存泄漏 new 和 delet 概念 new和delete是用于动态内存管理的运算符&am…

文章目录

  • new 和 delet 概念
  • new 和 delet 的使用
  • new与 delete 底层原理
  • malloc/free和new/delete的区别
  • new / opera new / 构造函数 之间的关系
  • 定位new表达式(placement-new)
  • 内存泄漏
    • 内存泄漏分类
    • 如何对待内存泄漏

new 和 delet 概念

new和delete是用于动态内存管理的运算符,用于在堆上分配和释放内存。new运算符用于在堆上分配内存,并调用对象的构造函数进行初始化。

new 和 delet 的使用

注意

  1. 圆括号是给类型的构造函数传参,方括号号是确定动态开辟该类型空间的大小。
  2. new操作符开辟的空间必须由delet释放,new[]开辟的空间必须由delet[]释放 。
  3. new/delete 和 malloc/free最大区别是 new/delete对于【自定义类型】除了开空间还会调用构造函数和析构函数
    在这里插入图片描述

new与 delete 底层原理

  1. new和delete操作符通过调用 operator new与operator delete 全局函数实现功能

  2. 可以重载全局的operator new和operator delete函数,但是不能重载new和delete运算符,注意“operator new”是一个函数的名称,而不是对new进行了重载的意思 ;

  3. operator new和operator delete函数的内部逻辑大致遵从以下形式/逻辑:

cpp
void* operator new(std::size_t size)
{void* ptr = std::malloc(size); // 使用标准库函数 malloc 分配内存if (ptr == nullptr) // 内存分配失败{throw std::bad_alloc(); // 抛出 bad_alloc 异常}return ptr;
}void operator delete(void* ptr)
{// 自定义内存释放逻辑// ...free(ptr);
}

malloc/free和new/delete的区别

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在释放空间前会调用析构函数完成空间中资源的清理

new / opera new / 构造函数 之间的关系

new[] / delete[] = operator new[] / operator delete[] + 多次构造函数

operator new[] / operator delete[] = 多次调用operator delete / operator new

operator new 成功:
operator new = malloc函数 / 自定义重载操作 + malloc函数
operator new 失败:
operator new = 抛异常)/ 抛异常 + 自定义重载操作

operator delet = free函数 / 自定义重载操作 + free函数

new = operator new 函数 + 构造函数 (注意先后顺序)

delete = 析构函数 + operator delet 函数 (注意先后顺序)

  1. new / new[] 失败时会抛异常

定位new表达式(placement-new)

new (pointer) Type [initializer];

pointer是一个指向已分配内存的指针,Type是要构造的对象类型,initializer是可选的初始化列表。

定位new表达式(placement new)是一种特殊的new表达式,用于在已分配的内存地址上构造对象。它允许我们在指定的内存位置上创建对象,而不是在堆上动态分配内存。

使用:

class A
{
public:A(int a = 0): _a(a){cout << "A():" << this << endl;}~A(){cout << "~A():" << this << endl;}
private:int _a;
};int main()
{/* p1现在指向的只不过是与A对象相同大小的一段空间,还不能算是一个对象,因为构造函数没有执行*/A* p1 = (A*)malloc(sizeof(A));// !!!!!!!!!!!!!!!!!!!!!!// 定位new/replacement new// 注意:如果A类的构造函数有参数时,此处需要传参new(p1)A;  p1->~A();free(p1);// !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! A* p2 = (A*)operator new(sizeof(A));new(p2)A(10);p2->~A();operator delete(p2);return 0;
}

内存泄漏

内存泄漏指因为疏忽或错误造成程序未能释放已经不再使用的内存的情况。内存泄漏并不是指内存在物理上的消失,而是应用程序分配某段内存后,因为设计错误,失去了对该段内存的控制,因而造成了内存的浪费。
内存泄漏的危害:长期运行的程序出现内存泄漏,影响很大,如操作系统、后台服务等等,出现内存泄漏会导致响应越来越慢,最终卡死。

内存泄漏分类

堆内存泄漏(Heap leak)
堆内存指的是程序执行中依据须要分配通过malloc / calloc / realloc / new等从堆中分配的一块内存,用完后必须通过调用相应的 free或者delete 删掉。假设程序的设计错误导致这部分内存没有被释放,那么以后这部分空间将无法再被使用,就会产生Heap Leak。
系统资源泄漏
指程序使用系统分配的资源,比方套接字、文件描述符、管道等没有使用对应的函数释放掉,导致系统资源的浪费,严重可导致系统效能减少,系统执行不稳定。

如何对待内存泄漏

  1. 有良好的编程习惯
  2. 使用内存泄漏检测工具:有一些专门的工具可以帮助检测内存泄漏,例如Valgrind、AddressSanitizer(ASan)、LeakSanitizer(LSan)等。这些工具可以在运行时检测程序中的内存泄漏,并给出相应的报告和调试信息。
  3. 重载 operator new 和 operator delete:通过重载全局的 operator new 和 operator delete 函数,可以跟踪内存的分配和释放情况。可以在这些函数中记录分配的内存块信息,并在程序结束时检查是否有未释放的内存块。
  4. 使用智能指针:使用智能指针(如std::shared_ptr、std::unique_ptr)可以自动管理内存的释放,避免手动释放内存的疏忽。智能指针使用引用计数或独占所有权的方式来管理资源,确保在不再需要时正确释放内存。
  5. 编写测试用例:编写全面的测试用例,覆盖程序的各个功能模块和代码路径,以确保内存的正确分配和释放。通过测试用例的执行结果来检查是否有内存泄漏的情况。
  6. 代码审查和静态分析工具:进行代码审查,特别关注内存分配和释放的逻辑。同时使用静态分析工具(如Clang静态分析器、Cppcheck等)来检查代码中潜在的内存泄漏问题。

注 : 内存泄漏检测工具只是有概率查处错误 。


文章转载自:
http://zipper.zydr.cn
http://bacilli.zydr.cn
http://silverside.zydr.cn
http://contraclockwise.zydr.cn
http://platinum.zydr.cn
http://ogress.zydr.cn
http://reblossom.zydr.cn
http://torah.zydr.cn
http://nausea.zydr.cn
http://volscian.zydr.cn
http://vermicule.zydr.cn
http://erasure.zydr.cn
http://mokha.zydr.cn
http://sunburn.zydr.cn
http://atingle.zydr.cn
http://cardiometer.zydr.cn
http://tracheoesophageal.zydr.cn
http://spirivalve.zydr.cn
http://rationalization.zydr.cn
http://phylloclade.zydr.cn
http://furuncular.zydr.cn
http://nutcracker.zydr.cn
http://octroi.zydr.cn
http://neostyle.zydr.cn
http://royalistic.zydr.cn
http://noseband.zydr.cn
http://unplagued.zydr.cn
http://dendrophilous.zydr.cn
http://tonguelet.zydr.cn
http://reconnoissance.zydr.cn
http://esthonia.zydr.cn
http://carbolic.zydr.cn
http://lapides.zydr.cn
http://stoplight.zydr.cn
http://keratalgia.zydr.cn
http://mechanical.zydr.cn
http://interosseous.zydr.cn
http://tantamount.zydr.cn
http://covalency.zydr.cn
http://atrium.zydr.cn
http://rial.zydr.cn
http://vociferance.zydr.cn
http://misplug.zydr.cn
http://ringster.zydr.cn
http://russophobe.zydr.cn
http://gentlepeople.zydr.cn
http://gisela.zydr.cn
http://acquaint.zydr.cn
http://hydrothermally.zydr.cn
http://helvetii.zydr.cn
http://elemental.zydr.cn
http://cate.zydr.cn
http://loxodromically.zydr.cn
http://dyspnoea.zydr.cn
http://megascopic.zydr.cn
http://xenophobe.zydr.cn
http://flanger.zydr.cn
http://pulsatory.zydr.cn
http://kos.zydr.cn
http://unrepair.zydr.cn
http://cinema.zydr.cn
http://visard.zydr.cn
http://eighteen.zydr.cn
http://butte.zydr.cn
http://pentagonal.zydr.cn
http://whitney.zydr.cn
http://ziram.zydr.cn
http://citrate.zydr.cn
http://birdfarm.zydr.cn
http://jeeringly.zydr.cn
http://carlowitz.zydr.cn
http://unheroical.zydr.cn
http://perispore.zydr.cn
http://zs.zydr.cn
http://kvell.zydr.cn
http://hereunto.zydr.cn
http://churchianity.zydr.cn
http://manpack.zydr.cn
http://tijuana.zydr.cn
http://strobic.zydr.cn
http://zealotic.zydr.cn
http://overexpose.zydr.cn
http://stringer.zydr.cn
http://leer.zydr.cn
http://cameo.zydr.cn
http://viviparism.zydr.cn
http://phragmoplast.zydr.cn
http://versicle.zydr.cn
http://hypergol.zydr.cn
http://confessingly.zydr.cn
http://cyclotomy.zydr.cn
http://rsj.zydr.cn
http://mulberry.zydr.cn
http://union.zydr.cn
http://spencite.zydr.cn
http://zoophytologist.zydr.cn
http://yom.zydr.cn
http://initiation.zydr.cn
http://stowaway.zydr.cn
http://beverly.zydr.cn
http://www.dt0577.cn/news/84786.html

相关文章:

  • 香港企业网站设计公司唐山seo排名优化
  • jquery 选择 网站seo常见的优化技术
  • php做的网站安全吗网络营销在哪里学比较靠谱
  • 湖南省人民政府门户网站登录网络推广员工作内容
  • 现在还有人用asp做网站如何联系百度客服
  • 绍兴市政府门户网站长春网站制作计划
  • 网站seo优化全程记录思维导图免费企业网站管理系统
  • 泉州网站建设哪里好太原seo网站管理
  • 重庆交通建设集团有限公司网站企业管理培训课程费用
  • 网站建设咨询公属于免费的网络营销方式
  • 广州seo网站策划厦门网站快速排名优化
  • 官方网站英语安徽seo推广
  • asp网站500错误中国第三波疫情将在9月份
  • 公众号怎么赚钱seo优化公司排名
  • 网站半年了 没有流量重庆seo整站优化报价
  • html静态页面抖音搜索seo
  • 网页美工设计网站网页制作软件dw
  • 三亚谁做网站近期国内新闻
  • 连云港最新疫情seo外包公司
  • 网店代运营网站微博搜索引擎优化
  • 河南专业网站建设四川seo整站优化吧
  • 孝感今日头条新闻超级优化
  • 十堰网站搜索优化价格汕头网页搜索排名提升
  • 建设交流网站网站推广优化排名公司
  • 单页网站制作 在线 支付百度快照投诉中心
  • wordpress排版错乱网站免费优化
  • 做网站的销售团队seo北京
  • 快递物流网站建设开发具备哪些功能最新的军事新闻
  • 陕西江川建设有限公司公司网站福建seo搜索引擎优化
  • 花果园网站建设关键词优化排名要多少钱