Chinaunix首页 | 论坛 | 博客
  • 博客访问: 164772
  • 博文数量: 25
  • 博客积分: 10
  • 博客等级: 民兵
  • 技术积分: 319
  • 用 户 组: 普通用户
  • 注册时间: 2011-10-12 21:27
文章分类

全部博文(25)

文章存档

2015年(2)

2014年(1)

2013年(22)

我的朋友

分类: C/C++

2013-05-18 16:32:07

 





对于32位系统,4字节对齐:
typedef struct _test
{
    int a;  
}test;
sizeof(test) = 4;

typedef struct _test
{
    int a;  
    char b;

}test;
sizeof(test) = 8;
由于是4字节对齐,故结构体大小肯定是4的倍数,当然空结构体另当别论了。
a占四字节,其后的b大小本身只是一个字节,但是四字节对齐,则另外三字节就空着了。(对于空结构体不同编译器不一样,有的是1字节,有的是0字节)

typedef struct _test
{
    int a;  
    char b;
    short c;

}test;
sizeof(test) = 8;
由于b后留有三个空字节,当c加入时大小小于3,故c会在那保留的空间,故结构体大小还是8字节,此时,还有一个字节空着的。

typedef struct _test
{
    int a;  
    char b;
    short c;
    double d;

}test;
sizeof(test) = 16;
由于d的大小为8字节,大于剩余的一个字节,故d需要另开空间,此时空间占用情况这样4+4(1+2另一字节保留)+8=16。

typedef struct _test
{
    int a;  
    char b;
    short c;
    double d;
    float e;

}test;
sizeof(test) = 20;
不用解释了。

typedef struct _test
{
    int a;  
    char b;
    short c;
    double d;
    float e;
    void (*f)(void);

}test;
sizeof(test) = 24;
指针占四字节。
 





阅读(2039) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~