new和malloc的区别

这个问题堪称经典。如果你是面试官,我建议你把这个问题作为你面试求职者的必选题目之一。如果你是求职者,我会建议你读懂和熟透这个题目涉及到的知识点。这个问题涉及到了C和C++中最经典的部分,可能也是C和C++的交汇。

        一些刚毕业的学生如果没有经验可能很难深有体会,大都数是强背。而工作多年的人深有体会是因为一个入门了,一个是吃过亏了,然后对编程和语言本身都有很大的升华。如果工作多年还不能回答此问题的,我觉得不算是很好的程序员。我认为可以从内存区域,重载,自定义类型,分配成功,返回类型,参数,属性等方面来聊一聊。

内存区域

如果能从内存回答的话,基本可以判定这个人是优秀的。很多人都会觉得new和malloc都在堆上,事实上不太准确的。

new操作符从*存储区上为对象动态分配内存空间,而malloc函数从堆上动态分配内存。*存储区是C++基于new操作符的一个抽象概念,凡是通过new操作符进行内存申请,该内存即为*存储区。

而堆是操作系统中的术语,是操作系统所维护的一块特殊内存,用于程序的内存动态分配,C语言使用malloc从堆上分配内存,使用free释放已分配的对应内存。*存储区不等于堆,如上所述,布局new就可以不位于堆中。

重载

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

而malloc不允许重载,这条要记得,mal

上一篇:C++ new和delete运算符简介


下一篇:内存泄漏和解决办法