• go结构体内存对齐


    目录:

    1:问题

    2:内存对齐

    3:内存优化

    一、问题

    给定两个结构体,分析下各种占用的内存空间是多少?

    package main
    
    import (
    	"fmt"
    	"unsafe"
    )
    
    type M1 struct {
    	i1 int8 //1 byte
    	i2 int64 //8 bytes
    	i3 int32 //4 bytes
    }
    
    type M2 struct {
    	i1 int8 //1 byte
    	i2 int32 //4 bytes
    	i3 int64 //8 bytes
    }
    
    func main()  {
    	//比较下M1和M2 是不是都是 等于13?
    	m1:=M1{}
    	fmt.Println(unsafe.Sizeof(m1)) //24
    
    	m2:=M2{}
    	fmt.Println(unsafe.Sizeof(m2)) //16
    }
    

    事实上m1的占用是24 ,m2的占用是16

    为什么会和我们想象的不一样!这就要知道内存对齐的知识了!

    二、内存对齐

     

    m1:i1进行后面会填充 i3也进行填充,i2 一次就可以抓取完。那么一共是占内存24个字节。

     我们调整顺序把i2放到i1去,这样我们的内存无形中就少占用了8个字节

     三、内存优化

    那我们上面时候去做这种优化?

     

  • 相关阅读:
    sqoop基本命令
    sqoop-介绍及安装
    HBase与Hive的集成操作
    Phoenix简介及操作
    HBase-Rest API操作
    HBase-Java Native API操作
    HBase-shell操作
    HBase-基本架构
    HBase-物理模型
    HBase-集群安装
  • 原文地址:https://www.cnblogs.com/hero799/p/15955182.html
Copyright © 2020-2023  润新知