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