对齐问题
.txt2
机会靠自己争取,命运需自己把握,生活是自己的五线谱,威慑呢们不亲自
演奏好它?更改
C
编译器的缺省字节对齐方式
在缺省情况下,
C
编译器为每一个变量或是数据单元按其自然对界条件分配空间。一般地,
可以通过下面的方法来改变缺省的对界条件:
·
使用伪指令
#pragma pack (n)
,
C
编译器将按照
n
个字节对齐。
·
使用伪指令
#pragma pack ()
,取消自定义字节对齐方式。
另外,还有如下的一种方式:
·
__attribute((aligned (n)))
,让所作用的结构成员对齐在
n
字节自然边界上。如
果结构中有成员的长度大于
n
,则按照最大成员的长度来对齐。
·
__attribute__ ((packed))
,取消结构在编译过程中的优化对齐,按照实际占用字
节数进行对齐。
以上的
n = 1, 2, 4, 8, 16...
第一种方式较为常见。
( via http://blog.csdn.net/wenddy112/articles/300583.aspx )
下面有一道在
CSDN
论坛
上讨论火热的题:
Intel
和微软和本公司同时出现的面试题
#pragma pack(8)
struct s1{
short a;
long b;
};
struct s2{
char c;
s1 d;
long long e;
};
#pragma pack()
问
1.sizeof(s2) = ?
2.s2
的
c
后面空了几个字节接着是
d?
感谢
redleaves(ID
最吊的网友
)
的解答,结果如下:
sizeof(S2)
结果为
24.
成员对齐有一个重要的条件
,
即每个成员分别对齐
.
即每个成员按自己的方式对齐
.