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

Xeo*_*Xeo 22 c++ heap

原本就@Als一个pedantics战争回答在这里,它也引发了C++聊天室的讨论.

Herb Sutter的这篇文章区分了两者,但也有十多年的历史,因为它显然是在2000年之前编写的,并且还讨论了标准草案,它只能代表C++ 98草案.尽管如此,作为委员会的一部分,我仍然希望赫伯能够对这些东西有所了解.

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

现在,真的有什么区别,如果有的话?

小智 23

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

  • 好吧,在C++ 14草案的一些非正式文本中曾经出现过一次"堆",我[擦掉了](https://github.com/cplusplus/draft/pull/380). (2认同)

Nod*_*ode 16

在Herb的书"Exceptional C++"中,他定义:

堆:malloc/ freefunctions 分配/释放的动态内存区域.

自由存储:new/ 分配/释放的动态内存区域delete.

它可能newdelete在方面来实现mallocfree,所以在技术上,他们可能是相同的内存区域.但是,由于标准没有指定这一点,最好分开处理它们,而不是混合malloc/ deletenew/ free.


Pup*_*ppy 6

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

  • @ abhinav8:C++是一种高级编程语言,它将诸如物理内存位置之类的实现细节抽象化.因此,当只谈论C++时,_没有stack_. (3认同)