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

     1  package main
     2  
     3  import (
     4  	"fmt"
     5  	"reflect"
     6  	"unsafe"
     7  )
     8  
     9  func main() {
    10  	var a int32
    11  	var b = &a
    12  	fmt.Println(reflect.TypeOf(unsafe.Sizeof(a))) // uintptr
    13  	fmt.Println(unsafe.Sizeof(a))                 // 4
    14  	fmt.Println(reflect.TypeOf(b).Kind())         // ptr
    15  	fmt.Println(unsafe.Sizeof(b))                 // 8
    16  }
    17  
    18  /*
    19  output
    20  uintptr
    21  4
    22  ptr
    23  8
    24  */
    25  // 对于 a来说,它是int32类型,在内存中占4个字节,而对于b来说,是*int32类型,即底层为ptr指针类型,在64位机下占8字节。