new與malloc的區別
- new順從c++的思想,在堆區申請一個對象,因此它會調用對象的構造函數進行初始化,它也應該調用構造函數;malloc在堆區申請一塊空間,用于存放資源
- new無需指定對象大小,可以自動計算對象大小進行資源分配;malloc需要指定資源大小。
- new和malloc都返回這塊空間的起始地址,但是new返回的是跟對象同類型的指針,而malloc返回的是void指針需要強轉成資源類型
- new失敗是會拋異常,malloc失敗時返回NULL
- new申請的資源需要delete去釋放,malloc申請的資源需要free去釋放;delete會調用對象的析構函數進行資源清理
被free回收的內存是立即返還給操作系統嗎?為什么
- 不是,free釋放的資源會被內存分配器ptmalloc使用雙鏈表先保存起來,當用戶下次進行資源申請時,ptmalloc會先從這些內存中尋找合適的內存進行返回
當一個內存塊被?
free
?時,ptmalloc
?首先會檢查相鄰的內存塊是否也是空閑的。如果是,它會將這些相鄰的空閑塊合并成一個更大的空閑塊。這是為了減少內存碎片,提高內存利用率