1. 程式人生 > 實用技巧 >golang 記憶體對齊&int8/int16/int32/int64區別

golang 記憶體對齊&int8/int16/int32/int64區別

計算機的基本的儲存單元有:   位(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