隐士低手 2020-06-15 10:24 采纳率: 0%
浏览 188

结构体内存对齐的原因?

结构体为什么要内存对齐,为了减少cpu内存读取的次数。
那么为什么会减少cpu内存读取的次数呢?
网上很多说法是因为cpu读取数据的粒度是4个字节,所以如果不对齐就会读两次。
我理解的是cpu读取内存是通过段指针+偏移指针读取的,如果数据跨段了,那么才需要读两次?
学习汇编的时候知道cpu会根据指令确定读取内存的字节数,并不一定是一次读取四个字节,读一个字节也可以。
到底哪个是正确的呢?

  • 写回答

1条回答 默认 最新

  • threenewbee 2020-06-15 10:33
    关注

    cpu读取内存是通过段指针+偏移指针读取
    你这个是早期dos下16bit计算机访问20bit地址,早就过时了。

    现在的cpu+操作系统,都是平坦寻址

    cpu会根据指令确定读取内存的字节数,并不一定是一次读取四个字节,读一个字节也可以。
    这说的是逻辑层面的,物理层面,可不可以是一回事,是否充分利用硬件资源了是另一回事。如果访问一个字节,也可以但是会慢,因为地址线就是32/64位的,你访问1个字节,等于一辆卡车拉货,没有拉满。
    司机虽然也能帮你拉,但是效率低。

    评论

报告相同问题?

悬赏问题

  • ¥15 求帮生成一个lattice diamond的许可证
  • ¥15 大一前端新生求教学解答
  • ¥15 如何制作一个可以查看“网游有序列的装备词条”的软件/插件
  • ¥15 CS2打5E与完美天梯匹配会与服务器断开连接(黑框没标明具体原因)
  • ¥15 利用cst反推材料电磁参数,推出想x,y,z方向的相对介电常数与磁导率
  • ¥15 求帮助!用赛灵思FPGA XC7A35T对一个频率50MHz的数字信号读取高低电平,只用HR bank普通单端io进行采样可以吗
  • ¥15 训练准确率100%,测试准确率只有50%
  • ¥15 grafana创建dashhabord提示no data sources of type Prometheus Alert
  • ¥15 python用arima时间序列法预测不出结果 急
  • ¥15 思科交换机如何恢复配置