2011-05-28 70 views
17

原本就@Als一個pedantics戰爭回答here,它在C++聊天室也引發了討論。堆和免費商店有什麼區別?

This article由香草薩特區分兩者,但也是在十年前,因爲它清楚地是2000年以前寫的,也談到了標準草案,這隻能意味着C++ 98草案。儘管如此,我仍然希望Herb作爲委員會的一部分,對這些東西有所瞭解。

我知道thisthis問題/答案,但是第二個只引用了Herb的文章,而第一個引用另一個來源,簡單地拒絕使用術語「堆」,即他們都不完全令人滿意。另外,我在SO上找不到任何free-storefreestore標籤(直到此問題,我現在創建了前一個標籤)。

現在,什麼是真正差異,如果有的話?

+1

重複http://stackoverflow.com/questions/1350819/c-free-store-vs-heap的? – Andrei 2011-05-28 11:07:14

+5

查看[Bjarne Stroustrup對此有何評論](http://zamanbakshifirst.blogspot.com/search/label/heap)。 – 2011-05-28 11:19:15

+0

@Prasoon:尼斯鏈接!現在,你爲什麼不把它作爲答案? :) – Xeo 2011-05-28 11:44:48

回答

19

那麼,當前的C++標準只使用了「免費商店」 - 只用「堆」的標準是描述標準庫中的堆數據結構。所以當試圖準確地討論C++問題時,「堆」並不是一個非常有用的術語,當然每個人都這樣做。

+0

正是我的想法。 +1 – Nawaz 2011-05-28 12:36:12

+1

那麼,在C++ 14草案的某些非正式文本中,我曾經發生過一次「堆」事件,並且我[抹去了它](https://github.com/cplusplus/draft/pull/380)。 – FrankHB 2016-05-08 14:22:36

5

free-store技術上不是堆,就像局部變量在技術上並不在堆棧中。然而,根據我的經驗,找到任何不接受這些條款的人是非常罕見的。

+0

.. + 1(char [15]) – Nawaz 2011-05-28 12:37:28

+0

請澄清「本地變量在技術上不在堆棧上」的含義。 – Eight 2012-06-28 09:56:18

+3

@ abhinav8:C++是一種高級編程語言,它將實現細節抽象爲物理內存位置。因此,當只談論C++時,_沒有stack_。 – 2013-01-19 17:46:04

13

在香草的書 「例外C++」,他定義:

堆:malloc/free功能釋放被分配的動態內存區/。

Free Store:new/delete分配/釋放的動態存儲區域。

其可能的newdelete按照mallocfree來實現,因此在技術上它們可以是相同的存儲區域。然而,由於標準沒有規定這一點,盡力separatly對待他們,而不是混合malloc/deletenew/free

+0

.. + 1(char [15]) – Nawaz 2011-05-28 12:38:17

相關問題