设为首页 加入收藏

TOP

C语言结构体对齐的学习
2013-02-19 13:02:56 来源: 作者: 【 】 浏览:533
Tags:语言 结构 齐的 学习

  01.# include <stdio.h>

  02.

  03.struct X

  04.{

  05.    int a;

  06.    char b;

  07.    int c;

  08.};

  09.int main(void)

  10.{

  11.    printf("%d\n",sizeof(struct X));

  12.

  13.    return 0;

  14.}

  15.

  16.

  17.

  18.# include <stdio.h>

  19.

  20.struct Y

  21.{

  22.    int a;

  23.    char b;

  24.    int c;

  25.    char d;

  26.};

  27.

  28.int main(void)

  29.{

  30.    printf("%d\n",sizeof(struct X));

  31.    return 0;

  32.}

  这个代码会输出什么?

  a) 9,10

  b)12, 12

  c)12, 16

  答案是C,我想,你一定知道字节对齐,是向4的倍数对齐。

  但是,你知道为什么要字节对齐吗?还是因为性能。因为这些东西都在内存里,如果不对齐的话,我们的编译器就要向内存一个字节一个字节的取,这样一来,struct X,就需要取9次,太浪费性能了,而如果我一次取4个字节,那么我三次就搞定了。所以,这是为了性能的原因。

  但是,为什么struct Y不向12 对齐,却要向16对齐,因为char d; 被加在了最后,当编译器计算一个结构体的尺寸时,是边计算,边对齐的。也就是说,编译器先看到了int,很好,4字节,然后是 char,一个字节,而后面的int又不能填上还剩的3个字节,不爽,把char b对齐成4,于是计算到d时,就是13 个字节,于是就是16啦。但是如果换一下d和c的声明位置,就是12了。

】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇c调用类成员函数的例子 下一篇C语言字符串用指针处理字符串

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容: