golang內存對齊的重要性

 

結構體中字段類型的改變直接造成內存對齊結果的改變,是的佔用內存空間也不一樣

package main

import (
	"fmt"
	"unsafe"
)

func main() {

	var xx struct {
		a bool
		b int32
		c []int
	}

	var x struct {
		a int32
		b []int
		c bool
	}
	fmt.Println("SIZE")
	fmt.Println(unsafe.Sizeof(x))  //32
	fmt.Println(unsafe.Sizeof(xx)) //40
	fmt.Println(unsafe.Sizeof(x.a))
	fmt.Println(unsafe.Sizeof(x.b))
	fmt.Println(unsafe.Sizeof(x.c))
	fmt.Println("ALIGN")
	fmt.Println(unsafe.Alignof(x))
	fmt.Println(unsafe.Alignof(x.a))
	fmt.Println(unsafe.Alignof(x.b))
	fmt.Println(unsafe.Alignof(x.c))
	fmt.Println("OFFSET")
	fmt.Println(unsafe.Offsetof(x.a))
	fmt.Println(unsafe.Offsetof(x.b))
	fmt.Println(unsafe.Offsetof(x.c))
}

  

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章