博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
结构体字节对齐方式
阅读量:5094 次
发布时间:2019-06-13

本文共 713 字,大约阅读时间需要 2 分钟。

内存对齐规则

  • 变量(结构体变量)的起始地址能够被其对齐值整除,结构体变量的对齐值为最宽的成员大小
  • 结构体每个成员相对于起始地址的偏移能够被其自身对齐值整除,如果不能则在前一个成员后面补充字节
  • 结构体总体大小能够被最宽的成员的大小整除,如不能则在后面补充字节

此外还有编译器的默认对齐值,一般默认对齐值为4(结构体的实际对齐值会取结构体对齐值和编译器默认对齐值中较小的那一个)。

内存对齐好的处

  • 为了减少使用的内存
  • 为了提升数据读取的效率
#include 
using namespace std;struct A{ char c; short a; int i; }; int main(){ A c; cout<
<
#include 
using namespace std;struct A{ char c; int i; short a;}; int main(){ A c; cout<
<

double类型的数组(double类型为8字节对齐), 其在内存中所处的位置如下

  数组的首地址为2,根据原则1数组未对齐。若CPU每次从内存中为8字节整数倍的地址开始读入8字节的数据,则每次从未对齐的数组中读取一个成员都要进行两次读取操作,而从对齐的数组中读取则只需要一次读取操作,数组对齐时读取效率有较大提升

 

转载于:https://www.cnblogs.com/tianzeng/p/9038395.html

你可能感兴趣的文章
获取千牛聊天对象(聊天记录中获取)
查看>>
GridView不換行
查看>>
Map在内存中的结构
查看>>
前端(HTML/CSS/JS)-HTML编码规范
查看>>
C#判断操作系统的位数
查看>>
项目管理之代码合并
查看>>
[插件]使用juery-ui插件拖拽盒子后,盒子不见了
查看>>
impala系列: 字符串函数
查看>>
基础知识点(一)
查看>>
T-SQL查询处理详解 (续)
查看>>
参数转换器执行流程
查看>>
实验七——函数定义及调用总结
查看>>
高性能的网络游戏服务器的设计。。。作者谈了QQGAME SERVER。。。 (转)
查看>>
原生 javascript 学习之 js变量
查看>>
Journey to SQLAuthority
查看>>
重写toString()
查看>>
How to use Reflector to see the code of .net framework
查看>>
[hihocoder][Offer收割]编程练习赛43
查看>>
开博体悟
查看>>
C#学习笔记(十七):委托、事件、观察者模式、匿名委托和lambert表达式
查看>>