Chinaunix首页 | 论坛 | 博客
  • 博客访问: 939694
  • 博文数量: 146
  • 博客积分: 3321
  • 博客等级: 中校
  • 技术积分: 1523
  • 用 户 组: 普通用户
  • 注册时间: 2008-08-29 10:32
文章分类

全部博文(146)

文章存档

2014年(2)

2013年(5)

2012年(4)

2011年(6)

2010年(30)

2009年(75)

2008年(24)

分类: C/C++

2009-03-07 22:11:57

   在内存中存取数据的最小单位一般是字节,但C语言允许在一个结构体中以位为单位进行存储。这就为一些内存比较小的嵌入式设备提供了方便。
例如:

#include
  struct bit_data{
     int a:6;
     int b:4;
     int c:4;
     int d;
  } p;
  int main(){
  p.a=13;
  p.b=10;
  p.c=8;
  p.d=45;
  printf("%d,%d,%d,%d",p.a,p.b,p.c,p.d);
  printf("\na=%d",sizeof(p.d));
}
程序给a分配6位的存储空间,b和c分配4位存储空间。以上程序运行结果为:13,-6,-8,45
                                                          4
    计算机中的数据都是用补码表示。这里b是四位表示出来就是1010,对1010再求补码就是1110,1110对应的十进制数就是-8。
     可以看到我们可以用sizeof(p.d)求得d所占的空间。但是不能用sizeof(p.a)计算a所占的空间。因为a是用位段表示的。

重要的一点:当我们用sizeof(p)计算结构体变量p所占的内存空间时,可能会误认为是4个字节,其实不然,正确是占8个字节因为gcc对内存管理采取的是压缩法。而要vc的话结果就会变成16。这就是所谓的内存对齐的问题。
阅读(668) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~