github.com/code-reading/golang@v0.0.0-20220303082512-ba5bc0e589a3/coding/unsafe/alignof.go (about)

     1  package main
     2  
     3  import (
     4  	"fmt"
     5  	"unsafe"
     6  )
     7  
     8  func main() {
     9  	fmt.Printf("bool align: %d\n", unsafe.Alignof(bool(true)))
    10  	fmt.Printf("int32 align: %d\n", unsafe.Alignof(int32(0)))
    11  	fmt.Printf("int8 align: %d\n", unsafe.Alignof(int8(0)))
    12  	fmt.Printf("int64 align: %d\n", unsafe.Alignof(int64(0)))
    13  	fmt.Printf("byte align: %d\n", unsafe.Alignof(byte(0)))
    14  	fmt.Printf("string align: %d\n", unsafe.Alignof("EDDYCJY"))
    15  	fmt.Printf("map align: %d\n", unsafe.Alignof(map[string]string{}))
    16  }
    17  
    18  /*
    19  在 Go 中可以调用 unsafe.Alignof 来返回相应类型的对齐系数。
    20  通过观察输出结果,可得知基本都是 2n,最大也不会超过 8。
    21  这是因为我们的64位编译器默认对齐系数是 8,因此最大值不会超过这个数。
    22  
    23  output
    24  bool align: 1
    25  int32 align: 4
    26  int8 align: 1
    27  int64 align: 8
    28  byte align: 1
    29  string align: 8
    30  map align: 8
    31  */