关于字节对齐的总结

转载 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:结构或者类中的静态成员和成员函数不对结构或者类的大小产生影响,因为静态变量和成员函数的存储位置与结构或者类的实例地址无关。

相关文章推荐

关于字节对齐的经验总结

  • 2011年12月20日 14:36
  • 13KB
  • 下载

结构体(struct)的使用、内存分布以及字节对齐测试总结

最近和班上的一些"猿友"重新来完善或重新写以前在学校用C语言实现的数据结构,实现单链表、双向链表、循环链表、树、图等等一些数据结构。需要实现这些数据结构就必须熟练掌握C语言中的自定义类型,即结构体(s...

C/C++字节对齐问题总结

原文链接:

字节对齐的一些总结

以下是一些经验:先假设一个结构体成员都是基本数据类型例子 WinXP下试验struct _tagStruct { char a; int b; char c; ...

<C/C++>C语言字节对齐问题总结

现在打算把自己的掌握的一些东西以博客的形式zhan
  • fzh1900
  • fzh1900
  • 2014年05月20日 20:12
  • 349

字节对齐和C/C++函数调用方式学习总结

前言: 《***软件编程规范》中提到:"在定义结构数据类型时,为了提高系统效率,要注意4字节对齐原则……"。本文解释x86上字节对齐的机制,其他架构读者可自行试验。同时,本文对C/C++的函数调用方...
  • undead
  • undead
  • 2011年05月26日 14:06
  • 598

内存字节对齐原则——总结

似乎每一家企业在招聘的时候都很关注这个问题,无论在笔试还是面试都会提及。ZZ最近找工作就经常遇到这样的问题,尽管之前有去了解过,但自己没有总结过,还是回答错了这才想起来总结了,为时不晚吧。 字节对齐的...

C/C++_字节对齐问题总结

根据以下资料,自己在两个编译器平台上试了试。 1.VC6.0(32bit X86系统上) 没指定对齐方式的前提下是,按照对齐算法要求排列的 2.KEIL4(C51) 单片机51中是单字节对齐方...

关于字节对齐的总结

关于字节对齐的总结
  • ljx0305
  • ljx0305
  • 2011年05月04日 14:45
  • 758

全面总结sizeof(字节对齐、数组、类(继承、虚函数)、结构体、strlen)*最全面*

最近在论坛里总有人问关于sizeof的问题,并且本人对这个问题也一直没有得到很好的解决,索性今天对它来个较为详细的总结,同时结合strlen进行比较,如果能对大家有点点帮助,这是我最大的欣慰了。 一、...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:关于字节对齐的总结
举报原因:
原因补充:

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