new/delete据说动态分配是在免费存储上进行的,而malloc/free操作则使用堆。在实践中,我想知道是否存在实际差异。编译器是否区分这两个术语?(免费存储和堆,不是new/malloc)
3 回答
![?](http://img1.sycdn.imooc.com/54584ee0000179f302200220-100-100.jpg)
隔江千里
TA贡献1906条经验 获得超10个赞
对于C ++,免费存储和堆之间的区别已成为纯粹的概念。就像一个用来收集bug的罐子和一个用来收集cookie的罐子。一种被标记为一种方式,另一种被标记为。此名称的意思是您切勿将“新”和“删除”与“ malloc”,“ realloc”或“ free”(或与此相关的位级别集)混合使用。
在采访中,最好说“ new和delete使用免费存储,malloc和free使用堆; new和delete分别调用构造函数和析构函数,而malloc和free则不使用。” 但是,您经常会听到内存段确实在同一区域中-但是,这可能是特定于编译器的,也就是说,可能两者都可以将不同的内存空间指定为池(不知道为什么会这样,虽然)。
![?](http://img1.sycdn.imooc.com/54584ed2000152a202200220-100-100.jpg)
MMMHUHU
TA贡献1834条经验 获得超8个赞
但是实际上,它们几乎总是相同的内存区域-在大多数情况下,如果深入研究编译器的实现new
,就会发现它称为malloc()
。
换句话说:从机器的角度来看,堆和免费存储是同一回事。区别存在于编译器内部。
为了使事情更加混乱,在C ++出现之前,我们说过“堆”是指现在所谓的“免费存储”。
- 3 回答
- 0 关注
- 411 浏览
添加回答
举报
0/150
提交
取消