堆和免费商店有什么区别?

时间:2011-05-28 11:03:37

标签: c++ heap

最初是对@Als回答here的迂腐战争,它也引发了C ++聊天室的讨论。

Herb Sutter的

This article区分了两者,但也有十多年的历史,因为它显然是在2000年之前编写的,并且还讨论了标准的草案,这只能意味着C ++ 98草案。尽管如此,作为委员会的一部分,我仍然希望赫伯能够了解这些事情。

我知道thisthis问题/答案,但是第二篇引用了Herb的文章,而第一篇引用另一个来源就是拒绝使用术语“堆”,也就是说它们都是不完全令人满意。另外,我在SO上找不到任何free-storefreestore标记(直到这个问题,我现在创建了前一个标记)。

现在,真正的区别是什么?

3 个答案:

答案 0 :(得分:23)

那么,当前的C ++标准只使用术语“免费存储” - 标准中唯一使用“堆”的是描述标准库中的堆数据结构。因此,“堆”在尝试准确地讨论C ++问题时并不是一个非常有用的术语,当然每个人都会这样做。

答案 1 :(得分:16)

在Herb的书“Exceptional C ++”中,他定义了:

堆:malloc / free函数分配/释放的动态内存区域。

免费商店:由new / delete分配/释放的动态内存区域。

newdelete可以mallocfree实现,因此从技术上讲,它们可能是相同的内存区域。但是,由于标准没有指定这一点,因此最好将它们分开处理,而不是混合使用malloc / deletenew / free

答案 2 :(得分:6)

free-store技术上不是堆,就像技术上局部变量不在堆栈上一样。但是,根据我的经验,找到任何不接受这些条款的人都是极其罕见的。