验证自然对界(natural align)

作者在 2011-03-04 12:36:12 发布以下内容
自然对界 
struct 是一种复合数据类型,其构成元素既可以是基本数据类型(如 int、long、float 等)的变量,也可以是
一些复合数据类型(如 array、struct、union 等)的数据单元。对于结构体,编译器会自动进行成员变量的对齐,以提高运算效率。缺省情况下,编译器为结构体的每个成员按其自然对界(natural alignment)条件分配空间。
各个成员按照它们被声明的顺序在内存中顺序存储,第一个成员的地址和整个结构的地址相同。 
自然对界(natural alignment)即默认对齐方式,是指按结构体的成员中size 最大的成员对齐。 
例如: 
struct naturalalign 

  char a; 
  short b; 
  char c; 
}; 
在上述结构体中,size最大的是 short,其长度为 2 字节,因而结构体中的 char 成员 a、c 都以2 为单位对齐,
sizeof(naturalalign)的结果等于 6; 
如果改为: 
struct naturalalign 

  char a; 
  int b;  
  char c; 
}; 
其结果显然为 12。(以上为转载部分)
 
我写的程序验证:
#include <stdio.h>
#include <stdlib.h>
struct stu
{
 char a;
 char b;
 int c;
 char d;
} stu={'a','b',123,'d'};
int main(int argc, char *argv[])
{
 char *p=&stu.a;
 printf("%d\n",sizeof(struct stu));
 printf("%c %c %d %c\n",*p,*(p+1),*(p+4),*(p+8));
 
 system("pause");
 return 0;
}
 
输出为:12
            a b 123 d
 

Cyuyan | 阅读 1268 次
文章评论,共6条
变幻小子
2011-03-18 12:29
1
路过看看
狂风暴雨·¥
2011-03-27 14:04
2
<img src="image/face/24.gif" class="face">太复杂了
尤慕思(作者)
2011-03-27 18:25
3
<div class="quote"><span class="q"><b>狂风暴雨·¥</b>: <img src="image/face/24.gif" class="face">太复杂了</span></div>不会啊,你是新生吧<img src="image/face/1.gif" class="face">
westerngoat
2011-04-04 14:34
4
长见识了。
尤慕思(作者)
2011-04-05 17:56
5
<div class="quote"><span class="q"><b>westerngoat</b>: 长见识了。</span></div>长多少<img src="image/face/1.gif" class="face">
啊1624739559
2011-04-14 23:37
6
好的、
游客请输入验证码
浏览70879次
最新评论