面试题: malloc与new的区别

  1. malloc, freeC语言中的库函数, new, deleteC++中的运算符
  2. new自动计算分配内存的大小,malloc需要手动计算分配内存的大小
  3. new返回对象类型的指针,malloc返回的是void*类型,需要显式类型转换
  4. new分配失败抛出异常,malloc分配失败返回NULL
  5. new是在自由存储区(堆)进行分配,malloc通常在堆上分配(malloc分配的空间是虚拟内存,物理内存的映射对应关系在初始化的时候被分配,即“延迟分配”,物理内存首次访问的时候才被分配)
  6. delete需要类型对象的指针,freevoid*类型的指针
面试潜在问题:
  1. malloc分配的是物理内存还是虚拟内存?

    • 虚拟内存
  2. malloc调用后是否立刻得到物理内存?

    • 并不是,会有“延迟分配”,在初始化的时候才被分配物理内存
  3. free(p)怎么知道该释放多大的空间?

    • malloc时会在分配空间地址前存储“元数据”

    • 内存换系统会查看“元数据(metadata)”中分配的内存块的大小

  4. free释放内存之后,内存还在吗?

    • brk返回内存池
    • mmap释放内存
malloc, calloc, realloc

malloc, calloc, 和 realloc 是 C 语言中用于动态内存分配的三个基本函数,它们都定义在 stdlib.h 头文件中。尽管这些函数都是用于分配内存,但它们在用法和行为上有一些关键的区别:

1. malloc (Memory Allocation)

分配指定数量的字节,分配的内存内容是未初始化的,可能包含任何随机数据。当只需要分配内存而不关心其初始内容时使用。

void* malloc(size_t size);
// size:需要分配的内存大小,以字节为单位。

2. calloc (Contiguous Allocation)

为指定数量的元素分配内存,每个元素有指定的大小,并且初始化所有位为零。

void* calloc(size_t num, size_t size);
// num:需要分配的元素数量。
// size:每个元素的大小,以字节为单位。

3. realloc (Re-Allocation)

重新调整之前分配的内存块的大小。

  • 如果新大小大于原始大小,额外的内存区域不会被初始化。
  • 可以扩大或缩小内存块,如果必要,可能会移动内存块到新位置。
void* realloc(void* ptr, size_t new_size);
// ptr:原有内存块的指针。如果 ptr 为 NULL,realloc 的行为类似于 malloc(new_size)。
// new_size:重新分配的内存块的新大小,以字节为单位。

最后给大家推荐一个LinuxC/C++高级架构系统教程的学习资源与课程,可以帮助你有方向、更细致地学习C/C++后端开发,具体内容请见 https://xxetb.xetslk.com/s/1o04uB

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/7973.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

大数据Scala教程从入门到精通第四篇:Scala语言特点

一:Scala语言特点 Scala是一门头Java虚拟机(JVM)为运行环境并将面向对象和函数式编程的最佳特性结合在一起的静态类型编程语言(静态语言需要提前编译的如:Java、c、c等,动态语言如:js) 1):Scala是一门多范式的编程语言,Scala支持…

[COCI2022-2023#1] Berilij 题解

推荐在 cnblogs 上阅读。 Solution P9030 [COCI2022-2023#1] Berilij 本题解转载翻译自官方题解:COCI 2022/2023 CONTEST 1 Part 1 让我们定义图形 G G G,顶点代表飞船,边代表两艘飞船外部接触的情况。此外,让边的边权成为它…

AI大模型程序员小白入门 - 关于如何更好地学习算法

关于本书 本项目旨在打造一本开源免费、新手友好的数据结构与算法入门教程。 全书采用动画图解,内容清晰易懂、学习曲线平滑,引导初学者探索数据结构与算法的知识地图。源代码可一键运行,帮助读者在练习中提升编程技能,了解算法工作原理和数据结构底层实现。提倡读者互助学…

git bash各分支修改内容不同但合并后不显示冲突问题

在跟着廖雪峰老师的git学习时,按部就班的执行明后,发现 而不是出现原文的结果 解决方法: 切换位feature分支,再合并 git switch feature1 git merge master 此时我们发现: 后面再跟着原文敲就可以了

双指针类型解题汇总

1 最接近的三数之和 给定一个包括 n 个整数的数组 nums 和 一个目标值 target。找出 nums 中的三个整数,使得它们的和与 target 最接近。返回这三个数的和。假定每组输入只存在唯一答案。 示例:输入:nums [-1,2,1,-4], target 1 输出&am…

每日一题5:Pandas-修改列

一、每日一题 一家公司决定增加员工的薪水。 编写一个解决方案,将每个员工的薪水乘以2来 修改 salary 列。 返回结果格式如下示例所示。 解答: import pandas as pddef modifySalaryColumn(employees: pd.DataFrame) -> pd.DataFrame:employees.loc[…

如何更好地使用Kafka? - 故障时解决

要确保Kafka在使用过程中的稳定性,需要从kafka在业务中的使用周期进行依次保障。主要可以分为:事先预防(通过规范的使用、开发,预防问题产生)、运行时监控(保障集群稳定,出问题能及时发现&#…

Databend 开源周报第 143 期

Databend 是一款现代云数仓。专为弹性和高效设计,为您的大规模分析需求保驾护航。自由且开源。即刻体验云服务:https://app.databend.cn 。 Whats On In Databend 探索 Databend 本周新进展,遇到更贴近你心意的 Databend 。 了解 Databend …

Redis学习(十)|使用消息队列的重试机制实现 MySQL 和 Redis 的数据一致性

文章目录 介绍原理整体方案实现步骤示例代码总结其他:Kafka 重试策略配置1. 生产者重试策略配置2. 消费者重试策略配置 介绍 在分布式系统中,保持 MySQL 和 Redis 之间的数据一致性是至关重要的。为了确保数据的一致性,我们通常采取先更新数…

去中心化金融与Web3:科技驱动的金融革命

随着区块链技术的发展和普及,去中心化金融(DeFi)作为其重要应用之一,正在成为金融领域的一场革命。结合Web3技术,去中心化金融正在以前所未有的方式重新定义着金融服务和产品的交付方式,推动着金融领域的创…

bfs之八数码

文章目录 八数码解题思路图解举例算法思路 代码CPP代码Java代码 八数码 在一个 33的网格中,1∼8这 8个数字和一个 x 恰好不重不漏地分布在这 33 的网格中。 例如: 1 2 3 x 4 6 7 5 8在游戏过程中,可以把 x 与其上、下、左、右四个方向之一…

【Oracle】Linux x86-64 安装Oracle 23AI指南

本文为云贝教育 刘峰 原创,请尊重知识产权,转发请注明出处,不接受任何抄袭、演绎和未经注明出处的转载。 前言 在信息技术日新月异的今天,企业级数据库系统扮演着数据管理与业务支撑的核心角色。Oracle数据库,作为全球…

IAP15W4K61S4单片机EEPROM读写程序

/*-------------关闭IAP----------------*/ void IapIdle() { IAP_CONTR 0; //关闭IAP功能 IAP_CMD 0; //清除命令寄存器 IAP_TRIG 0; …

专业软件测试会议

全国软件测试会议:这是一个系列性的专业会议,由中国的学术机构或专业组织主办,例如中国计算机学会的容错计算专业委员会。此会议自2005年起开始举办,历届会议地点包括北京、昆明和武汉等地。会议内容覆盖软件测试理论、实践、工具…

跟TED演讲学英文:4 pillars of college success in science by Freeman Hrabowski

4 pillars of college success in science Link: https://www.ted.com/talks/freeman_hrabowski_4_pillars_of_college_success_in_science Speaker: Freeman Hrabowski Date: February 2013 文章目录 4 pillars of college success in scienceIntroductionVocabularyTranscr…

uniapp打包的程序在Xcode中运行到模拟器报错的解决方法

uniapp打包的程序在Xcode中运行到模拟器报错的解决方法 问题描述: Building for iOS-simulator, but linking in object file (/Users/hori/Documents/SDK/SDK/Libs/DCUniRecord.framework/DCUniRecord[arm64][3](PGRecord.o)) built for iOS Linker command fail…

Day 25 数据库查询

数据库查询 一:基本查询 1.简介 ​ 单表查询 ​ 简单查询 ​ 通过条件查询 ​ 查询排序 ​ 限制查询记录数 ​ 使用集合函数查询 ​ 分组查询 ​ 使用正则表达式查询 2.案例 创建案例所需表:company.employee5 雇员编号 id int雇…

ISIS的工作原理

1.邻居关系建立 (1)IS-IS领接关系建立原则 1、通过将以太网接口模拟成点到点接口,可以建立点到点链路邻接关系。 2、当链路两端IS-IS接口的地址不在同一网段时,如果配置接口对接收的Hello报文不作IP地址检查,也可以建…

【AI】Tavily

Tavily是一个为人工智能代理(如大型语言模型,LLMs)和检索增强生成(RAG)应用优化的搜索引擎。它旨在提供高效、快速和持久的搜索结果。Tavily Search API 允许人工智能开发人员轻松地将他们的应用程序与实时在线信息集成…

深入理解MySQL的Purge机制

在MySQL中,尤其是在使用InnoDB存储引擎时,Purge机制起着至关重要的作用。它主要负责清理那些因为早期的版本或删除操作而不再需要的数据行版本。本文将详细介绍MySQL中的Purge机制,包括其作用、工作原理、如何配置以及优化步骤。 1. Purge机…