首页 > 编程知识 正文

c语言中malloc是什么意思,malloc与new区别

时间:2023-05-03 12:53:23 阅读:146409 作者:2977

资料来源: https://www.cn blogs.com/LC gbk/p/14118782.html

一、前言新闻和malloc的知识点,作为c工程师需要知道。 面试中也经常被问到。 因此,这篇文章总结了new和malloc的区别在哪里。

(二、new与malloc的区别2.1属性的区别new/delete )这两个是c中的关键字,需要编译器的支持才能使用。

malloc/free :这两个是库函数,必须引入适当的头文件才能正确使用。

2.2使用区分malloc :必须在申请空间中明确填写申请内存大小;

new :不需要明确输入请求的内存大小。 new根据new的类型分配内存。

实例:

/** malloc/free用例**/

int*ma=(int* ) malloc(4) 4;

free(ma;

/* *新/delete用例**/

int*ne=newint(0;

2.3存储器位置差异new :该操作员分配的存储器区域是自由存储器区域;

malloc :申请的内存位于堆区域。

抄送的内存通常分为堆、堆栈、自由存储区、全局/静态存储区和常量存储区。 自由内存区域以外的内存分布应该是众所周知的。

堆是c语言和操作系统的术语。 堆是操作系统维护的特殊内存,提供动态分配功能。 运行程序malloc ) )时从中分配,free ) )并返回内存。 什么是自由内存呢?

自由存储器区域是c中对象的动态分配和释放的概念,new分配的存储器区域称为自由存储器区域,由delete释放并返回存储器。 自由内存区域可以是堆、全局/静态内存区域等,具体在哪个区域,主要要看new的实现和c编译器默认情况下new申请的内存在哪里。 但是,基本上,许多c编译器默认使用堆实现自由内存,运算符new和delete的内部默认使用malloc和free实现,在堆上也是正确的,在自由内存区域也是正确的在c中,new和delete符号可以重载,因此可以重新实现new的实现代码,使分配的内存位置成为静态存储空间等。 malloc和free是c库函数,不能重载。

2.4返回类型区分如果new操作符的内存分配成功,则返回值为对象类型指针,类型严格匹配对象,无需进行类型转换,因此new是符合类型安全的操作符。

malloc内存分配成功是返回void *,需要通过强制类型转换将void *指针转换为所需的类型。 因此,在c程序中使用new会比malloc更安全、更可靠。

2.5分配失败的差异如果malloc分配内存失败,则返回NULL。 通过判断返回值可以知道分配是否成功

如果new内存分配失败,将抛出bac_alloc异常,并且不返回NULL。 分配失败时,如果不捕捉异常,程序将异常结束。 可以通过异常捕获获取此异常。

2.6定义目标系统调度过程差异的使用new操作符来分配对象内存时会经历三个步骤:

调用operator new函数(对于数组,为operator new[] )以分配足够的内存空间来存储特定类型的对象。 通常,在基本级别,缺省情况下使用malloc实现,除非程序员重新加载new符号。

编译器通过运行适当的构造函数生成对象并传递初始值。

对象生成完成后,返回指向该对象的指针。

使用delete操作符来释放对象内存时会经历两个步骤:

调用对象的析构函数。

编译器调用operator delete (或operator delete[] )函数以释放内存空间。 通常,默认情况下使用free实现,除非程序员重新加载delete符号。

可以自己通过实例进行验证,但这里不展开例程。

2.7扩展内存大小差异malloc :使用malloc分配内存后,发现内存不够。 那么,可以用realloc函数扩展内存大小。 realloc首先判断当前申请的内存后面是否还有足够的内存空间进行扩展。 如果有足够的区域,继续在后面申请区域,返回原来的地址指针。 否则,realloc会向另一个足够大的内存请求空间,将当前内存空间的内容复制到新内存区域,最后返回新的地址指针。

new:new没有扩展内存的机制。

三.总结

最后,如果你也想成为程序员,想快速掌握编程,赶紧学习企鹅圈子

有资深专业软件开发工程师,在线解答你所有的疑问~编程语言入门“so easy”

编程学习书:

编程学习视频:

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。