go記憶體布局

2021-10-14 09:29:12 字數 876 閱讀 2340

計算機 1byte=8bit

utf8 格式 1個英文本元是1byte,1個數字是1byte(0-9)

這個是相對於字元編碼來說的

而**裡的資料型別不同

go資料型別:

int=int64 =用64位bit表示乙個int也就是8個位元組byte,int的取值範圍為-2的31次方到2的31次方(-21 4748 3648 ~ 21 4748 3647 )

rune的底層是uint32,所以rune佔4個位元組,用4個位元組表示乙個字元,所以它可以表示的字元更多,比如中文。

byte底層是uint8,所以byte佔1個位元組,byte代表的是ascii碼裡的字元

string的是有多個byte切片組成的

//type stringstruct struct

切片的底層是slice的底層乙個struct,具有cap, length, ptr三個屬性

//type slice struct

結構體存在記憶體對齊

unsafe.sizeof 是變數的型別的所占用的記憶體,而不是變數本身的記憶體

比如變數 a 是string型別,string型別是 乙個stringstruct結構體 佔16位元組,而string變數本身

切片是一種引用型別,乙個切片是由指標 ,長度,容量表示,引用的是陣列索引指標指向 陣列的乙個位址,而len只是這個切片的長度,所以切片變數本身的記憶體大小就是sizeof的值。只是在記憶體中還有個陣列

字串本身是多個byte組成的,本身也是一種引用,stringstruct由乙個指標位址和長度組成,string宣告好了就是乙個固定的數值,不能修改,如果要修改 要轉換成byte修改

總結 資料

標準Go專案布局

了解 standard go project layout,順便了解下 k8s 的 layout。平時工作也會看k8s 但是說實話對了k8s的目錄設計不是很明白,不是特別明白每個目錄檔案下面存放什麼內容,最近看了kubernetes原始碼剖析,才了解到 standard go project lay...

GO 記憶體對齊

之前遇到過這樣乙個情況 發現問題的結構體並不長這樣,不過為了引出問題,改了一下 type test structfunc main fmt.printf d unsafe.sizeof t 建立乙個結構體,檢視一下其記憶體占用.看結果前先簡單算一下 這麼算下來的話,test結構體占用應該是 1 4 ...

go 記憶體分配

二者都是在堆上分配記憶體,但是它們的行為不同,適用於不同的型別 new 函式分配記憶體,make 函式初始化 new t 為型別t分配一塊記憶體,並返回指向這塊記憶體位址的指標,它適用於值型別如陣列和結構體 make t 初始化內建的資料結構,返回乙個型別為 t 的空值,它只適用於3種內建的引用型別...