go new和make開闢記憶體

2022-03-12 15:18:09 字數 711 閱讀 1233

內建函式new按指定型別長度分配零值記憶體,返回指標,並不關心型別內部構造和初始化方式。

而引用型別則必須使用make函式建立

編譯器會將make轉換為目標型別專用的建立函式(或指令),

以確保完成全部記憶體分配和相關屬性初始化。

當然,new函式也可為引用型別分配記憶體,但這是不完整建立。以字典(map)為例,它僅分配了字典型別本身(實際就是個指標包裝)所需記憶體,並沒有分配鍵值儲存記憶體,也沒有初始化雜湊桶等內部屬性,因此它無法正常工作。

相比數字、陣列等型別,引用型別擁有更複雜的儲存結構。除分配記憶體外,它們還須初始化一系列屬性,

諸如指標、長度,甚至包括雜湊分布、資料佇列等。

go new 和 make 的區別

看起來二者沒有什麼區別,都在堆上分配記憶體,但是它們的行為不同,適用於不同的型別。make t 返回乙個型別為 t 的初始值,它只適用於3種內建的引用型別 切片 map 和 channel 換言之,new 函式分配記憶體,make 函式初始化 下圖給出了區別 上兩個圖 上圖中 var p int n...

c 記憶體的開闢和釋放

關於new和delete,malloc和free。我們都知道,是在不同的語言裡面做相應的記憶體的開闢和釋放工作的,那麼這篇博文就來好好的了解一下他們的區別和工作原理吧 1 引言 首先,我們還是寫乙個我們經常使用的在c語言中動態開闢的方式 int main p 10 free p return0 其中...

堆上記憶體四大開闢函式 和棧上記憶體開闢函式

include include include alloca函式的標頭檔案 int main p2 int calloc 3,sizeof int 第乙個元素是元素的個數,第二個元素是元素的大小。記憶體初始化為0 printf p n p2 for i 0 i 3 i p3 int realloc ...