C_and_CPP 版 (精华区)
发信人: seaboy (浪小), 信区: C_and_CPP
标 题: [FAQ]什么是对齐 (转)
发信站: 哈工大紫丁香 (2003年08月27日10:18:50 星期三), 站内信件
对齐有很多,
结构对齐,栈对齐,
变量地址对齐。
内存分配对齐。
一般的gcc兼容的对齐大致是这样的,
变量地址对齐,
所有具有静态储存类型的变量按照缺省对齐。
栈对齐按照给编译器传的参数,这是指的变量地址要对齐。
要改编一个静态储存类型的对齐方式,
用 __attribute__((aligned(xxx)))指定。
这个gcc扩展不但gcc支持,
其他很多编译器也支持。
结构对齐,是指结构内部布局和最后sizeof的对齐。
内部布局对齐一般原则是符合该类型的对齐
例如一个64位的RISC机器
struct A {
char x;
struct B b;
char y;
char z;
long xx;
};
如果 struct B的对齐是16.
那么最后整个struct A的sizeof就按照16对齐,
如果小于sizeof(long)
就按sizeof(long)对齐。
如此递归往外。
内部偏移,
b被放到了b的对齐量的偏移量上,
如果b的对齐是16
那么b的偏移就是16.
接下来y因为b的sizeof是对齐的,
所以就是对齐的。
但z就不一定对齐,因为char这个基本类型不需要对齐。
再接下来xx又是按8对齐了。
对struct的sizeof可以用__attribute__(packed(xxx)))来缩小对齐。
用__attribute__(aligned(xxx)))来增大对齐。
还有一些其他的对齐方面的问题,这里就不说了。
--
才知道
原来
自己需要的是
100万
份勇气。。。
※ 来源:·哈工大紫丁香 bbs.hit.edu.cn·[FROM: 202.118.239.104]
Powered by KBS BBS 2.0 (http://dev.kcn.cn)
页面执行时间:4.966毫秒