您的位置:首页 > 其它

改变编译器字节对齐条件的简单说明

2012-08-22 16:39 211 查看
要改变编译器默认的字节对齐方式,Linux下可使用一下两种方法:

一:

#pragma pack (n) //C编译器将按照n个字节对齐。

#pragma pack () //取消自定义字节对齐方式

例如:

#pragma pack(1) //一下内容按1个字节对齐

struct Test

{

char a;

int b;

}

#pragma pack() //恢复默认


二:

__attribute((aligned (n))) //让所作用的结构成员对齐在n字节自然边界上。如果结构中有成员的长度大于n,则按照最大成员的长度来对齐。

__attribute__ ((packed)) //取消结构在编译过程中的优化对齐,按照实际占用字节数进行对齐。

例如:

struct Test1

{

char a;

int b;

}__attribute((aligned (1)));

//此时结构体大小为8(假设int大小为4),因为int的大小大于1,所以a按大小为4算。

struct Test2

{

char a;

int b;

}__attribute((packed));

//此时结构体按实际占用字节数进行对齐,大小为5.


如有不对的地方,请大家指出。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: