new与malloc比较与底层实现

1.new与 operator new() 关系,placement new 作用
new指C++里通常用运算符,不可重载,比如A* a = new A; (1)调用:operator new()分配内存,(2)执行构造函数,返回指向分配内存的指针
operator new():指对new的重载形式,它是一个函数,并不是运算符。对于operator new来说,分为全局重载和类重载,全局重载是void* ::operator new(size_t size),在类中重载形式 void* A::operator new(size_t size),重载后形参可能发生变化的。
A* a = new A 的调用过程为:(1)分配内存:调用operator new()分配内存,如果是类重载则是调用如果类A重载了operator new,那么将调用A::operator new(size_t ),如果没有重载,就调用全局::operator new(size_t ),事实上都是调用系统默认的全局::operator new(size_t size),调用malloc分配内存,并且返回一个void*指针。此外,类重载可以只是指定了内存分配失败的调用的new_handler处理函数,改写为global_new_handler,类对象析构后之后global_new_handler复位,分配失败抛出异常。(2)构造函数:执行构造函数,返回指向分配内存的指针,这一步在new中完成。
placement new: 如果new在执行operator new()成功,但是在执行构造时候失败,这是需要释放内存,否则会内存泄漏,但是没有返回指针,客户无法释放,需要由系统自动释放。正常的operator new(size_t size)对应operator delete(void *pmemory),如果是带有额外附加参数的operator new(size_t ,void *pmemory),则无法用全局operator delete释放,形成了placement new() 函数,因此必须也为其定义带有额外参数、用于释放的placement delete()函数, operator delete(void *pmemory,void ptr)正确释放。
2.New与malloc总结:
(1)New/delete 是c++运算符,malloc/free是c库函数;
(2)new内置了sizeof,自动计算需要的空间,malloc需手动计算字节数;
(3)new是类型安全的,其内部含有类型转换,类型检查,其自带构造功能,可返回构造的对象的指针;malloc返回void
指针,需强制类型转换,不安全;
(4)new 对应delete,分别对应分配内存,构造对象,析构对象,释放内存的功能,malloc与free直接分配回收内存;
(5)malloc与free需要库文件支持,new与delete不需要。

new与malloc比较与底层实现相关推荐

  1. new和delete底层解析

    new和delete底层解析 2018年04月05日 10:26:44 龙跃十二 阅读数:205 标签: C++newdelete 更多 个人分类: C++ 所属专栏: C++ 版权声明:本文为博主原 ...

  2. 动态语言会淘汰静态语言吗?

    上一篇博客动态语言会导致开发质量下降吗?,尽管没有我想像的那么多争议,但还是如期引发了一些误解.有一些朋友指出动态语言,具体来说是 Python 中的各种问题.这些我认为是大部分是正确的. 我写上文的 ...

  3. 2021年最新总结,腾讯、阿里、美团、百度、字节跳动、京东等技术面试题,以及答案,专家出题人分析汇总。持续更新中。

    阿里篇 华为篇 百度篇 腾讯篇 美团篇 字节跳动篇 滴滴篇 京东篇 MySQL篇 Redis篇 MongoDB篇 Zookeeper篇 Nginx篇 算法篇 内存篇 cpu篇 磁盘篇 网络通信篇 安全 ...

  4. 2019最新 BAT、TMD等公司技术面试题及其答案

    点击上方"码农突围",马上关注 这里是码农充电第一站,回复"666",获取一份专属大礼包 真爱,请设置"星标"或点个"在看&quo ...

  5. 2019上半年阿里,腾讯,百度,美团,头条等技术面试题目,以及答案,专家出题人分析汇总...

    一.阿里篇 1.1.1 如何实现一个高效的单向链表逆序输出? 1.1.2 已知sqrt(2)约等于1.414,要求不用数学库,求sqrt(2)精确到小数点后10位 1.1.3 给定一个二叉搜索树(BS ...

  6. 手写内存泄漏检测组件

    手写内存泄漏检测组件 前言 内存泄漏 内存泄漏的现象与危害 内存泄漏检测组件的两个核心需求点 第一版:__libc_malloc, __libc_malloc 与 __builtin_return_a ...

  7. 阿里,腾讯,百度,美团,头条等技术面试题目

    2021年最新总结,阿里,腾讯,百度,美团,头条等技术面试题目,以及答案,专家出题人分析汇总.持续更新中. 阿里篇 华为篇 百度篇 腾讯篇 美团篇 头条篇 滴滴篇 京东篇 MySQL篇 Redis篇 ...

  8. 稳住,能进大厂,腾讯T3大佬整理阿里、百度、京东、美团等面试题汇总

    阿里篇 1 如何实现一个高效的单向链表逆序输出? 2 已知sqrt(2)约等于1.414,要求不用数学库,求sqrt(2)精确到小数点后10位 3 给定一个二叉搜索树(BST),找到树中第 K 小的节 ...

  9. 面试题汇总:阿里、百度、京东、美团等

    阿里篇 1 如何实现一个高效的单向链表逆序输出? 2 已知sqrt(2)约等于1.414,要求不用数学库,求sqrt(2)精确到小数点后10位 3 给定一个二叉搜索树(BST),找到树中第 K 小的节 ...

最新文章

  1. 关于jQuery中的offset()和position()
  2. 开启 J2EE(七)— Model1、Model2和三层架构的演变
  3. linux tomcat下部署多个项目启动失败
  4. 继承extends ,this super final 关键字,abstract抽象类,override方法重写
  5. SAP Cloud for Customer移动端应用SAP推荐的网络时延参数
  6. python hack_Python进阶:深入GIL(上篇)
  7. Python机器学习(sklearn)——分类模型评估与调参总结(下)
  8. Linux 实用工具vi
  9. mysql万能密码_万能密码:‘or 1=1-- 实战SQL注入,秒破后台
  10. 批量删除新浪微博及自动发布微博
  11. pano2vr.exe下载
  12. java获取当前学期
  13. 工作经验的Java学习心得
  14. Qt滚动区域QScrollArea
  15. 使用Pyppeteer进行gmail模拟登录
  16. AD通过图表符链接多个原理图
  17. Minecraft基岩版电脑端游戏按键整合
  18. 基于MATLAB的MIMO信道估计(附完整代码与分析)
  19. python识别图片中数字_Python图像处理之图片验证码识别
  20. 《软件测试》读书笔记

热门文章

  1. 华为鸿蒙系统能用几年不卡,除了苹果,这四款华为也能三年不卡,还能升级鸿蒙!...
  2. ChatGPT通过谷歌L3入职测试,拿到18万美元offer?程序员们该何去何从?
  3. 全自动安装的XP补丁包
  4. 教大家把同事做成暴走表情包
  5. 商家编号_doc_010简洁的简历模板word格式
  6. 典范英语杜希奇与机器人_典范英语7_16 杜希奇与机器人.ppt
  7. 入门企业级 PHP 协程框架 Hyperf
  8. 计算机技能训练bcd是什么,BCD是什么,BCDEdit命令是什么?
  9. 碰撞检测 Unity实验代码
  10. 大屏可视化根据屏幕分辨率等比例缩放