大佬教程收集整理的这篇文章主要介绍了联合中的C对齐,大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
typedef long Align; /* for alignment to long boundary */ union header { /* block header: */ struct { union header *ptr; /* next block if on free list */ unsigned size; /* size of this block */ } s; Align x; /* force alignment of blocks */ }; typedef union header Header;
然后它继续说“从未使用Align字段;它只是强制每个标题在a上对齐@H_675_10@最坏情况边界“.我已多次读取文本,但仍然不明白为什么对齐需要很长时间.SIZE是一个int,PTR是4个字节,所以它不应该对齐吗?为什么要使用long,和不是int?谢谢.
正如@Deduplicator指出的那样,仍有许多嵌入式系统使用16位指针.
编辑以回应评论:对齐的主题相当广泛且充满细微差别.为了简单起见,下面的讨论做出了这些假设
>指针是16位@H_675_10@> int是16位@H_675_10@>长是32位@H_675_10@>处理器具有严格的对齐要求,即16位值只能在2字节边界上访问,32位值只能在4字节边界上访问.
以下结构将占用32位
struct header { struct header *ptr; unsigned size; };
但是,结构中的字段仍然是16位.因此,对齐要求仍然只有16位.因此,例如,将结构放置在地址0xAA02将完全有效,因为ptr将位于对齐的地址(0xAA02),并且大小也将位于对齐的地址(0xAA04).
但是,地址0xAA02没有为并集适当地对齐,因为并集的x字段需要32位对齐.因此,将结构放入与x的并集会强制编译器将结构放在4字节边界上,否则它可以放在2字节边界上.
以上是大佬教程为你收集整理的联合中的C对齐全部内容,希望文章能够帮你解决联合中的C对齐所遇到的程序开发问题。
如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。
本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。