zoukankan      html  css  js  c++  java
  • go语言 内存对齐

    我们在学习结构体的时候肯定会遇到一个新的概念,那就是“内存对齐”

    官话:为什么要内存对齐

    • 平台(移植性)原因:不是所有的硬件平台都能够访问任意地址上的任意数据。例如:特定的硬件平台只允许在特定地址获取特定类型的数据,否则会导致异常情况
    • 性能原因:若访问未对齐的内存,将会导致 CPU 进行两次内存访问,并且要花费额外的时钟周期来处理对齐及运算。而本身就对齐的内存仅需要一次访问就可以完成读取动作

     

    看例子分析

    // 写法一
    type T1 struct {
        a int8
        b int64
        c int16
    }
     

     其中绿色是int8占用的空间,红色是补齐的空间,蓝色是  int64占用的空间 黄色是int16占用的空间  红色是补齐空间,总共占用12个字节

    分析了很多文章,写的都很绕,在这我们从操作系统的读取习惯来说

    它是这样四个四个的读的  并不是一次全读,你如果不把单独的变量放在一段里,他就会读两次(因为放在两个里面了嘛)就像下面的图,这样效率就降低了

     
     
    // 写法二
    type T2 struct {
        a int8
        c int16
        b int64
    }
    内存占用情况:

     可以看到写法二总共占用8个字节,和一相比 节省了资源,所以以后定义变量的时候尽量按照从小到大的顺序来

    自己瞎研究的,要是有不对的地方欢迎指正,评论,谢谢!!!

  • 相关阅读:
    Rstudio代码的快捷键
    sqlhelper帮助类
    图片上传
    反射获取 obj类 的属性 与对应值
    jquery 操作 动态创建的 元素
    Path类使用
    jquery 小数计算保持精度
    js字符串转成数字
    DateTime.Now.ToString()的各种字符串
    Linq语句 动态组建
  • 原文地址:https://www.cnblogs.com/shuai666/p/15188802.html
Copyright © 2011-2022 走看看