内存对齐问题

type W struct {
    b byte
    i int32
    j int64
}

type W2 struct {
    name string
    age  int32
}

var w W
var w2 W2
fmt.Println(unsafe.Sizeof(w), unsafe.Sizeof(w2))

对于w变量我知道内存占用应该是16,但是w2为啥是24呢?求赐教

阅读 2.1k
2 个回答
import "fmt"
import "unsafe"

func main() {
    var bs []byte
    fmt.Println("[]byte:", unsafe.Sizeof(bs))
    var str string
    fmt.Println("string:", unsafe.Sizeof(str))
    var i64 int64
    fmt.Println("int64:", unsafe.Sizeof(i64))
    var i32 int64
    fmt.Println("int32:", unsafe.Sizeof(i32))
    var stru struct{}
    fmt.Println("struct:", unsafe.Sizeof(stru))       
}   

文档上这么写的

Sizeof takes an expression x of any type and returns the size in bytes of a hypothetical variable v as if v was declared via var v = x. The size does not include any memory possibly referenced by x. For instance, if x is a slice, Sizeof returns the size of the slice descriptor, not the size of the memory referenced by the slice.

我看了unsafe.Sizeof(), string是16 int32是4,按8对齐,你就是24嘛

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题