go 記憶體分配

2022-03-16 21:24:24 字數 772 閱讀 1602

二者都是在堆上分配記憶體,但是它們的行為不同,適用於不同的型別;

new 函式分配記憶體,make 函式初始化;

new(t) :為型別t分配一塊記憶體,並返回指向這塊記憶體位址的指標,它適用於值型別如陣列和結構體;

make(t) :初始化內建的資料結構,返回乙個型別為 t 的空值,它只適用於3種內建的引用型別:slice、map 和 channel;

如果你錯誤的使用 new() 分配了乙個引用物件,你會獲得乙個空引用的指標,相當於宣告了乙個未初始化的變數並且取了它的位址;

new(int) 指向乙個值為空的位址;

make(int,0) 指向乙個空陣列;

1.slice、map以及channel都是golang內建的一種引用型別,三者在記憶體中存在多個組成部分, 需要對記憶體組成部分初始化後才能使用,而make就是對三者進行初始化的一種操作方式;

2. new 獲取的是儲存指定變數記憶體位址的乙個變數,對於變數內部結構並不會執行相應的初始化操作, 所以slice、map、channel需要make進行初始化並獲取對應的記憶體位址,而非new簡單的獲取記憶體位址;

字串 s:= "hello" 的記憶體結構

值型別的內存在棧上分配;

指標型別的內存在堆上分配;

記憶體分配 Go記憶體管理 記憶體分配一

go作為乙個比較新晚 新 的語言,自然借鑑前輩們的優點,比如說語言本身負責記憶體管理 對協程和高併發的高優支援 簡單高效的語法等。本篇及後續的幾篇要講的就是還沒提到的比較複雜的記憶體管理。學習記憶體管理 分配 前,如果有jvm的記憶體管理的基礎,會變得非常簡單,如果是第一次接觸記憶體管理,在看完go...

go切片基礎及記憶體分配

目錄 一 切片介紹 二 切片使用 切片建立 陣列和切片的區別 切片的實現原理 切片建立可以通過make函式,如建立乙個整形切片 長度len 5,cap 5,使用make建立切片,不指定第3個引數時,預設切片容量等於長度 mslic make int,5 此時,列印該切片,切片值為 0,0,0,0,0...

Go記憶體分配機制 TCMalloc

本文是 循序漸進go語言 第四篇 go記憶體分配機制。golang的記憶體採用了tcmalloc 這種分配機制。go是在多種語言誕生n多年之後,才由幾個大神開發的。每種語言都有自己的記憶體分配機制,那麼作為後起之秀,go為什麼選用tcmalloc呢?因為tcmalloc thread cache m...