经典面试题之new和malloc的区别

2023-11-20

new和malloc的区别是C/C++一道经典的面试题,我也遇到过几次,回答的都不是很好,今天特意整理了一下。

0.       属性

new/delete是C++关键字,需要编译器支持。malloc/free是库函数,需要头文件支持。

1.       参数

使用new操作符申请内存分配时无须指定内存块的大小,编译器会根据类型信息自行计算。而malloc则需要显式地指出所需内存的尺寸。

2.       返回类型

new操作符内存分配成功时,返回的是对象类型的指针,类型严格与对象匹配,无须进行类型转换,故new是符合类型安全性的操作符。而malloc内存分配成功则是返回void * ,需要通过强制类型转换将void*指针转换成我们需要的类型。

3.       分配失败

new内存分配失败时,会抛出bac_alloc异常。malloc分配内存失败时返回NULL。

4.      自定义类型

         new会先调用operator new函数,申请足够的内存(通常底层使用malloc实现)。然后调用类型的构造函数,初始化成员变量,最后返回自定义类型指针。delete先调用析构函数,然后调用operator delete函数释放内存(通常底层使用free实现)。

         malloc/free是库函数,只能动态的申请和释放内存,无法强制要求其做自定义类型对象构造和析构工作。

5.      重载

C++允许重载new/delete操作符,特别的,布局new的就不需要为对象分配内存,而是指定了一个地址作为内存起始区域,new在这段内存上为对象调用构造函数完成初始化工作,并返回此地址。而malloc不允许重载。

6.       内存区域

new操作符从自由存储区(free store)上为对象动态分配内存空间,而malloc函数从堆上动态分配内存。自由存储区是C++基于new操作符的一个抽象概念,凡是通过new操作符进行内存申请,该内存即为自由存储区。而堆是操作系统中的术语,是操作系统所维护的一块特殊内存,用于程序的内存动态分配,C语言使用malloc从堆上分配内存,使用free释放已分配的对应内存。自由存储区不等于堆,如上所述,布局new就可以不位于堆中。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

经典面试题之new和malloc的区别 的相关文章

  • python 文件、文件夹和路径操作笔记

    记录python关于文件夹 文件和路径的一些常用操作 方便用时查询 常用的函数备注 os listdir 列出文件夹中所有文件 os path splitext 获取文件的后缀名 返回list 后缀在list 1 中 os path joi
  • 解决win10应用程序图标丢失问题

    1 问题 sublime 软件图标莫名其妙不显示 2 解决办法 1 进入cmd命令提示符 2 输入如下内容 taskkill im explorer exe f cd d userprofile appdata local del icon

随机推荐

  • 数据库之MySQL大全

    目录 1 MySQL数据库概述 2 MySQL的安装 Install MySQL 3 MySQL的配置 4 E R模型 5 创建数据库 6 数据类型 7 创建数据表 8 修改数据表 9 数据表约束 非空与默认值 10 数据表约束 唯一键与自
  • In-Context Retrieval-Augmented Language Models

    本文是LLM系列文章 针对 In Context Retrieval Augmented Language Models 的翻译 上下文检索增强语言模型 摘要 1 引言 2 相关工作 3 我们的框架 4 实验细节 5 具有现成检索器的上下文
  • 利用python(networkx库)画带权&不带权有向图、无向图

    利用python networkx库 画带权 不带权有向图 无向图 效果展示 分段代码 全部源代码 传送门 https download csdn net download weixin 44978992 12719404 当我们处理完几百
  • TCP可靠传输的工作原理-停止等待&连续的ARQ(一)

    在网络传输中 我们认为最理想的传输状态就是 1 传输信道不产生差错 2 不管发送方以多块的速度发送数据 接收方都能来得及接受以及处理这些数据 当然 这种只是理想状态 在实际运用中 几乎是不可能的 因此 我们需要采取一些可靠的传输协议 1 当
  • 物联网平台相关IoTgo

    相关资源 http www geek workshop com thread 12726 1 1 html https github com itead IoTgo https github com itead IoTgo Android
  • h5 关于视频video在微信中的自动播放

    本来video只用autoplay就可以自动播放的 但是由于微信的限制 autoplay在微信中失效 解决方式
  • 软件测试/测试用例设计题详细整理— 助攻高薪求职之路

    前言 8月底了 即将步入金九银十 又有很多小伙伴开始霍霍找工作了 笔者最近也会比较偏向发面试题哟 希望可以帮助到大家 最近收到很多应聘者反馈过来的笔试面试问题 其中有一部分是关于测试用例设计 对了对了笔者发现无论是刚入职场的测试新人还是在具
  • 【内网安全】——windows信息收集

    作者名 Demo不是emo 主页面链接 主页传送门 创作初心 一切为了她 座右铭 不要让时代的悲哀成为你的悲哀专研方向 网络安全 数据结构 每日emo 爱是深渊 目录 一 windows信息收集简介 二 信息收集大纲 1 本机信息 1 系统
  • 【Zabbix实战之故障处理篇】Zabbix-proxy服务启动失败解决方法

    Zabbix实战之故障处理篇 Zabbix proxy服务启动失败解决方法 一 故障说明 1 故障说明 2 故障截图 二 配置环境检查 1 检查zabbix proxy conf文件 2 检查mysql8 0数据库状态 三 故障处理思路 四
  • Mysql如何对两张表的相同字段,同时查询两张数据表

    前言 假设现在有两张数据表 表1如下 表2如下 表1和表2同时都再mysql的情况下 只有他们的uuid是一样的 其他字段信息不同 现在需要用sql语句根据uuid 同时将符合要求的数据查询出来 怎么做呢 sql语句同时查询两张表 废话不多
  • appium - 常用操作

    from appium webdriver common touch action import TouchAction from appium webdriver common multi action import MultiActio
  • 【年度大戏】勒索”嘿客“无间道之战

    年度大戏 勒索 嘿客 无间道之战 为了保护多位表演群众 以下内容均以化名出现 所有图片取自对当事人的报告和贴吧原贴 历史群消息中 并均对ID打码处理 25仔的就不打了 本文只陈述基本事实基本推断 不做结论性推断 内容均无 伪造 瞎编 脑补意
  • Oracle 实现select(查询)的结果集随机顺序展示

    在一些需求中会要求打乱结果集顺序随机展示 Oracle的实现方式如下 select from table order by dbms random value 这种用法没有参数 会返回一个具有38位精度的数值 范围从0 0到1 0 但不包括
  • stm32实用篇5:HAL库 DHT11 驱动

    DHT11是很常用的温湿度传感器 时序也比较简单 如下所示 直接给出HAL库的驱动 1 微秒级延时函数 HAL库并没有直接的微秒级延时函数 下面是自己实现的微秒堵塞延时函数 使用定时器TIM3 brief 微秒级延时 void bsp de
  • 格式化时间用了YYYY-MM-dd,元旦当天老板喊我回去改Bug!

    视频福利推荐 2T免费学习视频 内含SSM Spring全家桶 微服务 MySQL MyCat 集群 分布式 中间件 Linux 网络 多线程 Jenkins Nexus Docker ELK等等免费学习视频 持续更新 往期热门文章 1 往
  • Linux面试题1

    一 取出 etc passwd文件中shell出现的次数 问题 下面是一个 etc passwd文件的部分内容 题目要求取出shell并统计次数 shell是指后面的 bin bash sbin nologin等 如下面 bin bash出
  • 主线剧情0.0-Linux学习资源大综合

    Linux 学习资源大综合 对收集到的比较丰富的 Linux 学习相关的资料进行整理 注 如果链接挂了请告诉我 如果链接里的内容被删了那么直接搜文章名字试试也许会搜出来很多转载的 备份 注 在 Github 上的原版文章日后可能会更新 在其
  • 37: 合并区间

    题目 以数组 intervals 表示若干个区间的集合 其中单个区间为 intervals i starti endi 请你合并所有重叠的区间 并返回 一个不重叠的区间数组 该数组需恰好覆盖输入中的所有区间 思路 这道题我的思路完全正确 先
  • 杰理之提示音的使用【篇】

    打开 SDK 对应的 cpu brxx tools ACxxxN config tool 进入配置工具入口 gt 选择编译前配置 工具 gt 提示音配置
  • 经典面试题之new和malloc的区别

    new和malloc的区别是C C 一道经典的面试题 我也遇到过几次 回答的都不是很好 今天特意整理了一下 0 属性 new delete是C 关键字 需要编译器支持 malloc free是库函数 需要头文件支持 1 参数 使用new操作