最初是对@Als回答here的迂腐战争,它也引发了C ++聊天室的讨论。
Herb Sutter的This article区分了两者,但也有十多年的历史,因为它显然是在2000年之前编写的,并且还讨论了标准的草案,这只能意味着C ++ 98草案。尽管如此,作为委员会的一部分,我仍然希望赫伯能够了解这些事情。
我知道this和this问题/答案,但是第二篇引用了Herb的文章,而第一篇引用另一个来源就是拒绝使用术语“堆”,也就是说它们都是不完全令人满意。另外,我在SO上找不到任何free-store
或freestore
标记(直到这个问题,我现在创建了前一个标记)。
现在,真正的区别是什么?
答案 0 :(得分:23)
那么,当前的C ++标准只使用术语“免费存储” - 标准中唯一使用“堆”的是描述标准库中的堆数据结构。因此,“堆”在尝试准确地讨论C ++问题时并不是一个非常有用的术语,当然每个人都会这样做。
答案 1 :(得分:16)
在Herb的书“Exceptional C ++”中,他定义了:
堆:由malloc
/ free
函数分配/释放的动态内存区域。
免费商店:由new
/ delete
分配/释放的动态内存区域。
new
和delete
可以malloc
和free
实现,因此从技术上讲,它们可能是相同的内存区域。但是,由于标准没有指定这一点,因此最好将它们分开处理,而不是混合使用malloc
/ delete
或new
/ free
。
答案 2 :(得分:6)
free-store
技术上不是堆,就像技术上局部变量不在堆栈上一样。但是,根据我的经验,找到任何不接受这些条款的人都是极其罕见的。