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

 
                


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM