您的位置:首页 > 其它

字节对齐详解

2016-07-20 01:18 295 查看
[b]目录[/b]

一:字节对齐概述

二:字节对齐原则

三:设置编译器对齐系数n的两种方法

四:代码示例

[b]正文[/b]

一:字节对齐概述

cpu根据自身处理器的字长和数据总线宽度确定一条指令寻址的位数,比如16位处理器每次访问16bit的数据,为了提高处理器效率,编译器会对不同数据类型的变量进行内存对齐。

二:字节对齐原则

字节对齐三原则:(以结构体数据类型为例)

1:确定有效对齐位数;

假设设置编译器的对齐位数为n,最终有效对齐位数为N,N=Min(n,结构体成员所占字节数),n和N都是以字节为单位;

2:结构体成员自身对齐;

确定有效对齐位数后,需满足结构体成员起始地址%N=0;

3:结构体整体对齐

结构体成员自身对齐后,结构体整体大小是有效对齐位N的整数倍;

三:设置编译器对齐系数n的两种方法

1:可以通过预编译指令#pragma pack(n),n=1,2,4,8,16来指定编译器的对齐系数n;

2:_attribute_机制,此机制为GUN C的扩展,适用GCC编译器, _attribute_ ((aligned (n)))可以指定编译器的对齐系数,_attribute_((packed))指定变量或者结构体或者共用体采用最小对齐模式,即一字节对齐,位域是位对齐;

四:代码示例
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息