C ++,免费存储与堆

new/delete据说动态分配是在免费存储上进行的,

而malloc/free操作则使用堆。


在实践中,我想知道是否存在实际差异。

编译器是否区分这两个术语?(免费存储和堆,不是new/malloc)


莫回无
浏览 412回答 3
3回答

隔江千里

对于C ++,免费存储和堆之间的区别已成为纯粹的概念。就像一个用来收集bug的罐子和一个用来收集cookie的罐子。一种被标记为一种方式,另一种被标记为。此名称的意思是您切勿将“新”和“删除”与“ malloc”,“ realloc”或“ free”(或与此相关的位级别集)混合使用。在采访中,最好说“ new和delete使用免费存储,malloc和free使用堆; new和delete分别调用构造函数和析构函数,而malloc和free则不使用。” 但是,您经常会听到内存段确实在同一区域中-但是,这可能是特定于编译器的,也就是说,可能两者都可以将不同的内存空间指定为池(不知道为什么会这样,虽然)。

MMMHUHU

但是实际上,它们几乎总是相同的内存区域-在大多数情况下,如果深入研究编译器的实现new,就会发现它称为malloc()。换句话说:从机器的角度来看,堆和免费存储是同一回事。区别存在于编译器内部。为了使事情更加混乱,在C ++出现之前,我们说过“堆”是指现在所谓的“免费存储”。
打开App,查看更多内容
随时随地看视频慕课网APP