分享一下我老师大神的人工智能教程!零基础,通俗易懂!http://blog.csdn.net/jiangjunshow
也欢迎大家转载本篇文章。分享知识,造福人民,实现我们中华民族伟大复兴!
结构体struct的自然对齐问题
下面的机构体
struct A
{
char c;
int i;
char cc;
};
它的sizeof()是多少呢? 如果是紧凑对齐的话,当然是sizeof(char)+sizeof(int)+sizeof(char); 但编译器默认编译的却不是紧凑对齐的,在32-bit的机器上编译结果是12, 这是一个char占用了一个int的空间,换句话说,在c和i之间有三个空余的byte! 这就是自然对齐的效果。
为什么要自然对齐呢?
当初百度的gg电面我的时候,我胡乱的解释了一下,居然是对的,真是佩服我的扯淡能力。原来x86架构下的cpu访存时,是需要地址对齐的,举个例子,取short型时,地址需要是2的倍数,取int型是地址需要是4的倍数,如果不是的话,则可能降低cpu访存的效率。例,一个int的地址是0x03的话,先是按地址0x00取int的第一个byte,然后按地址0x04取剩下的三个byte,所以原本一次访存搞定的事情,却做了两次,简直是脱裤子放屁--多此一举嘛,哈哈。
怎么计算自然对齐的sizeof()呢?
这个才是面试官的杀手锏,哈哈。
其实就是一个规律--这个取决于cpu的字长。
在32bit的cpu上,对齐的单位是4个byte,64bit的我没有试过,谁有环境搞