为什么new()/delete()比malloc()/free()慢?
EDIT:
感谢到目前为止的回答。如果您有new()和delete()的标准C++实现规范,请指出,谢谢!
看一下这段C代码:
struct data* pd = malloc(sizeof(struct data));
init_data(pd);
The new
C++ 中的运算符本质上就是执行上面代码的作用。这就是为什么它比malloc()
.
同样与delete
。它所做的相当于:
deinit_data(pd);
free(pd);
如果构造函数和析构函数为空(就像内置函数一样),new
and delete
不应该慢于malloc()
and free()
是。 (如果他们are,这通常是由于常见的实现调用malloc()
/free()
在引擎盖下,所以它们是它们周围的包装。包装费用。此外,可能有一些代码需要确定没有要调用的构造函数/析构函数。这也是要付出代价的。)
Edit回答您的附加问题:
new
and delete
不是函数,它们是运算符。这:new data()
被称为新的表达方式。它有两件事。首先它调用operator new
,然后通常通过调用适当的构造函数来初始化该对象。 (我说“通常”是因为内置函数没有构造函数。但是涉及内置函数的新表达式的工作原理是相同的。)
您可以操纵这两个阶段。您可以创建自己的构造函数来操作类型的初始化,并且可以重载operator new
(即使有多个具有不同附加参数的重载,并且如果需要的话,也可以专门针对每个类)以便操纵空闲存储的分配。如果你不实现自己的operator new
,使用标准库中的版本。此调用的常见实现malloc()
.
同样,如果你写delete pd
,称为删除表达式,发生两件事:取决于pd
,对象被反初始化,通常是通过调用它的析构函数,然后通过调用适当的方法释放内存operator delete
.
同样,您可以通过编写自己的析构函数和编写自己的版本来操纵这两个阶段operator delete
。 (版本为operator delete
标准库附带的通常被实现来调用free()
.)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)