golang 記憶體對齊&int8/int16/int32/int64區別
阿新 • • 發佈:2020-09-21
計算機的基本的儲存單元有:
位(bit):二進位制數中的一個數位,可以是0或者1,是計算機中資料的最小單位。二進位制的一個“0”或一個“1”叫一位。
位元組(Byte,B):計算機中資料的基本單位,每8位組成一個位元組。各種資訊在計算機中儲存、處理至少需要一個位元組
ASCIIS碼:1個英文字母(不分大小寫)= 1個位元組的空間
1箇中文漢字 = 2個位元組的空間
1個ASCII碼 = 一個位元組
UTF-8編碼:1個英文字元 = 1個位元組
英文標點= 1個位元組
1箇中文(含繁體) = 3個位元組
中文標點 = 3個位元組
Unicode編碼:1個英文字元 = 2個位元組
英文標點= 2個位元組
1箇中文(含繁體) = 2個位元組
中文標點 = 2個位元組
字(Word):兩個位元組稱為一個字。漢字的儲存單位都是一個字。
計算機儲存容量大小以位元組數來度量,1024進位制:
1024B=1K(千)B
1024KB=1M(兆)B
1024MB=1G(吉)B
1024GB=1T(太)B
這是常用的五個,至於PB,EB,ZB,YB,BB,NB,DB幾乎在日常使用中是不會遇到的。
而Int8,Int16,Int32,Int64,後面的數字就代表這個資料型別佔據的空間。
Int8, 等於Byte, 佔1個位元組.
Int16, 等於short, 佔2個位元組. -32768 32767
Int32, 等於int, 佔4個位元組. -2147483648 2147483647
Int64, 等於long, 佔8個位元組. -9223372036854775808 9223372036854775807
go 中 string 佔16個位元組
另外, 還有一個Byte, 它等於byte, 0 - 255.
擴充套件的儲存單位有:
type One struct { id1 int8 id2 int32 id3 int8 } type Two struct { id1 int32 id2 int8 id3 int8 } func main() { fmt.Println(unsafe.Sizeof(One{})) //size為12 fmt.Println(unsafe.Sizeof(Two{})) //size為8 fmt.Println(unsafe.Sizeof("222222222")) //size為16 fmt.Println(unsafe.Sizeof(111111111)) //size為8 fmt.Println(unsafe.Sizeof(1.1)) //size為8 }
這樣我們在寫程式碼定義結構體變數時,注意設定他的大小和順序
對齊內容可看一篇文章:https://zhuanlan.zhihu.com/p/53413177