关于字节对齐的总结

转载 2013年12月02日 14:26:04

1、使用默认的字节对齐方式。
 规则1:各成员变量存放的起始地址相对于结构的起始地址的偏移量必须为该变量的类型所占用的字节数的倍数。
注: 下面列出常用类型的对齐方式(vc6.0, 32位系统)。 
 类型  对齐方式(变量存放的起始地址相对于结构的起始地址的偏移量) 
 Char  偏移量必须为sizeof(char)即1的倍数 
 int  偏移量必须为sizeof(int)即4的倍数 
 float  偏移量必须为sizeof(float)即4的倍数 
 double  偏移量必须为sizeof(double)即8的倍数 
 Short   偏移量必须为sizeof(short)即2的倍数 

 规则2: 结构的总大小为结构的字节边界数(即该结构中占用最大空间的变量的类型所占用的字节数)的倍数。

2、使用自定义的字节对齐方式(即,使用“#pragma pack(n)”来设定变量以n字节对齐方式)。
 规则3:如果n大于等于当前变量的类型所占用的字节数,那么偏移量必须满足此变量默认的对齐方式(参照规则1);如果n小于当前变量的类型所占用的字节数,那么偏移量为n的倍数,不用使用默认的对齐方式。
 规则4:如果n大于等于结构中任何的类型所占用的字节数,那么结构的总大小必须为占用空间最大的变量的类型所占用的字节数的倍数(参照规则2);否则结构的总大小必须为n的倍数。

3、结构中带有结构
 规则5:不必考虑整个子结构,只考虑子结构的基本类型并参照前面的规则来分配空间。
 规则6:空结构(即不带任何的方法和数据)占用的1字节的空间。

4、枚举中(enum)
 规则7:枚举始终占用4字节的空间。

5、联合中(union)
 规则8:其占用的空间为其中最大成员所占用字节数,此外联合总的大小还要考虑“规则2”和“规则4”。

6、类中(class)
 规则9:空类(即不带任何的方法和数据)占用的1字节的空间。
 规则10:结构或者类中的静态成员和成员函数不对结构或者类的大小产生影响,因为静态变量和成员函数的存储位置与结构或者类的实例地址无关。

关于字节对齐的理解

字节对齐的剖析 一、需要了解的名词和概念 1、数据类型自身的对齐值:即数据本身所占字节长度。 2、结构体或类的自身对齐值:即其中数据成员类型对齐值的最大值。 3、指定对齐值:由编程人员通过#pragm...
  • zhang360896270
  • zhang360896270
  • 2014年09月17日 11:52
  • 2255

Windows和Linux下的字节对齐

Windows和Linux下的字节对齐(转载)   http://blog.163.com/fenglin9999@126/blog/static/4756724820110262426308/ ...
  • xiaotangxianshengqi
  • xiaotangxianshengqi
  • 2015年03月18日 09:25
  • 362

stm32f10x adc 4字节对齐问题

今天写多通道adc,通过dma搬运数据,遇到一个大坑问题 在次记录
  • wingceltis
  • wingceltis
  • 2017年09月10日 10:36
  • 147

C++中结构体的字节对齐问题

  前不久,在C++程序中碰到一个有关结构体字节对齐的问题。一。问题描述在程序中,定义了一个结构体,如下:typedef struct{   char name[33];   int ID;   in...
  • roger_77
  • roger_77
  • 2006年04月02日 00:18
  • 3031

MapReduce总结 (1)

【1】Hadoop Map/Reduce框架为每一个InputSplit产生一个map任务,而每个InputSplit是由该作业的InputFormat产生的。 【2】Mapper的输出被排...
  • zzh118
  • zzh118
  • 2016年04月07日 21:53
  • 346

烘焙圈总结

这个项目首次尝试使用flex-box来进行布局,一开始的确是有些迷茫不知道怎么用,可是上手之后发现真的很方便!不过有点效果还是需要float来实现,弄清楚什么地方适用就好 //若要对display:b...
  • cztflove
  • cztflove
  • 2015年12月12日 23:32
  • 392

C++ 内存的字节对齐

一、字节对齐的原因            在访问内存时,如果地址是按4字节对齐,则访问效率会高很多。这种现象的原因在于访问内存的硬件电路。一般情况下,地址总线总是按照对齐后的地址来访问。例如,你想得...
  • u011974126
  • u011974126
  • 2015年08月29日 11:31
  • 405

网络知识点总结

整理一下计算机网络部分的面试常考点,参考书籍:《计算机网络》第五版 谢希仁的那本,希望对大家有所帮助 OSI,TCP/IP,五层协议的体系结构,以及各层协议 OSI分层 (7层):物理层、数据链路层...
  • u012129558
  • u012129558
  • 2016年05月30日 11:25
  • 1480

关于Java 项目的思考总结

Java 项目思考总结前言今天是2017年3月25日,笔者已经毕业半年,工作经验一年。 正好有心思写这个总结。持续开发对于Java项目,我所接触的一般就是JavaWeb项目和 Java Jar后台进...
  • u011042188
  • u011042188
  • 2017年03月26日 00:14
  • 249

关于计算机学习的总结

很遗憾,自己学习计算机走入了很多误区。多想回到最初接触学习的时候,假如….没有假如。只能说遇到引路人真的很重要,如果没有,那学习的经历将是曲折的。我只想记录一些自己的经验,让读到这篇文章的人,找到一些...
  • qq_33745102
  • qq_33745102
  • 2017年11月21日 22:31
  • 144
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:关于字节对齐的总结
举报原因:
原因补充:

(最多只允许输入30个字)