为了账号安全,请及时绑定邮箱和手机立即绑定

C ++,免费存储与堆

C ++,免费存储与堆

C++
莫回无 2019-11-05 16:15:00
new/delete据说动态分配是在免费存储上进行的,而malloc/free操作则使用堆。在实践中,我想知道是否存在实际差异。编译器是否区分这两个术语?(免费存储和堆,不是new/malloc)
查看完整描述

3 回答

?
隔江千里

TA贡献1906条经验 获得超10个赞

对于C ++,免费存储和堆之间的区别已成为纯粹的概念。就像一个用来收集bug的罐子和一个用来收集cookie的罐子。一种被标记为一种方式,另一种被标记为。此名称的意思是您切勿将“新”和“删除”与“ malloc”,“ realloc”或“ free”(或与此相关的位级别集)混合使用。


在采访中,最好说“ new和delete使用免费存储,malloc和free使用堆; new和delete分别调用构造函数和析构函数,而malloc和free则不使用。” 但是,您经常会听到内存段确实在同一区域中-但是,这可能是特定于编译器的,也就是说,可能两者都可以将不同的内存空间指定为池(不知道为什么会这样,虽然)。


查看完整回答
反对 回复 2019-11-05
?
MMMHUHU

TA贡献1834条经验 获得超8个赞

但是实际上,它们几乎总是相同的内存区域-在大多数情况下,如果深入研究编译器的实现new,就会发现它称为malloc()

换句话说:从机器的角度来看,堆和免费存储是同一回事。区别存在于编译器内部。

为了使事情更加混乱,在C ++出现之前,我们说过“堆”是指现在所谓的“免费存储”。


查看完整回答
反对 回复 2019-11-05
  • 3 回答
  • 0 关注
  • 411 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信