- 8
- 0
- 约 10页
- 2017-06-03 发布于河南
- 举报
结构体内存对齐题目
结构体内存对齐问题
结构体内存对齐问题.txt偶尔要回头看看,否则永远都在追寻,而不知道自己失去了什么。男人掏钱是恋人关系,女人掏钱是夫妻关系,男女抢着掏钱是朋友关系。男人爱用眼睛看女人,最易受美貌迷惑;女人爱用心看男人,最易受伤心折磨。当在C中定义了一个结构类型时,它的大小是否等于各字段(field)大小之和?编译器将如何在内存中放置这些字段?ANSI C对结构体的内存布局有什么要求?而我们的程序又能否依赖这种布局?这些问题或许对不少朋友来说还有点模糊,那么本文就试着探究它们背后的秘密。
首先,至少有一点可以肯定,那就是ANSI C保证结构体中各字段在内存中出现的位置是随它们的声明顺序依次递增的,并且第一个字段的首地址等于整个结构体实例的首地址。比如有这样一个结构体:
struct vector{int x,y,z;} s;
int *p,*q,*r;
struct vector *ps;
p = s.x;
q = s.y;
r = s.z;
ps = s;
assert(p q);
assert(p r);
assert(q r);
assert((int*)ps == p);
// 上述断言一定不会失败
这时,有朋友可能会问:标准是否规定相邻字段在内存中也相邻?。 唔,对不起,ANSI C没有
原创力文档

文档评论(0)