关于 字节对齐

来源:互联网 发布:商城源码授权便宜 编辑:程序博客网 时间:2024/06/09 21:48

字节对齐:减少CPU访存次数(以空间换时间),有的cpu必须要求字节对齐,否则出现异常


gcc 不支持#pargma pack (8) 按默认的4字节对齐 ,  vc支持

如: struct s

{

char a;  double b;

}      gcc下可能为12字节,而VC下为16字节(8字节对齐)

  对齐的原因是为了减少cpu访问变量的次数,这时补充为8字节没有意义,对32位寄存器的cpu来说,至少需要访问2次,但是如果你的cpu寄存器是64位的,那又不一样了
总之一句话,字节对齐是为了减少cpu的访问次数 



struct t
{
int a;
char b;
};


struct s
{
char e;
struct t;
char d;
};//             sizeof(struct s) = 16   ( struct 首先作为一个整体)


 如果最大长度为4字节,你以2字节对齐的方式存储,会出现什么问题 
 01 02 03 04 05 06,  这是地址,  4字节存储在02 03 04 05 
 很不幸,这样的存储方式如果以2字节存取的方式会导致存取一个变量需要访问3次, 为什么
第一次,取出01 02 地址中的02地址所保存的值, 第二次取出03 04,第三次取出05, 这样效率是极低的 
如果4字节存放在01 02 03 04, 那么我存取一次就可以把整个4字节的数据全部取到
不过,现实情况中应该以0为起始地址