new/delete據說動態分配是在免費存儲上進行的,而malloc/free操作則使用堆。在實踐中,我想知道是否存在實際差異。編譯器是否區分這兩個術語?(免費存儲和堆,不是new/malloc)
3 回答

隔江千里
TA貢獻1906條經驗 獲得超10個贊
對于C ++,免費存儲和堆之間的區別已成為純粹的概念。就像一個用來收集bug的罐子和一個用來收集cookie的罐子。一種被標記為一種方式,另一種被標記為。此名稱的意思是您切勿將“新”和“刪除”與“ malloc”,“ realloc”或“ free”(或與此相關的位級別集)混合使用。
在采訪中,最好說“ new和delete使用免費存儲,malloc和free使用堆; new和delete分別調用構造函數和析構函數,而malloc和free則不使用?!?但是,您經常會聽到內存段確實在同一區域中-但是,這可能是特定于編譯器的,也就是說,可能兩者都可以將不同的內存空間指定為池(不知道為什么會這樣,雖然)。

MMMHUHU
TA貢獻1834條經驗 獲得超8個贊
但是實際上,它們幾乎總是相同的內存區域-在大多數情況下,如果深入研究編譯器的實現new
,就會發現它稱為malloc()
。
換句話說:從機器的角度來看,堆和免費存儲是同一回事。區別存在于編譯器內部。
為了使事情更加混亂,在C ++出現之前,我們說過“堆”是指現在所謂的“免費存儲”。
- 3 回答
- 0 關注
- 434 瀏覽
添加回答
舉報
0/150
提交
取消