免费注册 查看新帖 |

Chinaunix

广告
  平台 论坛 博客 文库
12下一页
最近访问板块 发新帖
查看: 3462 | 回复: 11
打印 上一主题 下一主题

struct的大小? [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2006-08-23 11:47 |只看该作者 |倒序浏览
struct bit
{
unsigned a:1;
unsigned b:3;
unsigned c:4;
} bit;

struct bit1
{
unsigned a_bit:2;
unsigned b_bit:2;
unsigned c_bit:1;
unsigned d_bit:1;
unsigned e_bit:2;
}bit1;

sizeof(bit)和sizeof(bit1)分别是多少呢?
我的都是4,why?

论坛徽章:
0
2 [报告]
发表于 2006-08-23 11:58 |只看该作者
1. unsigned 等于 unsigned int
2. 对齐

论坛徽章:
0
3 [报告]
发表于 2006-08-23 16:11 |只看该作者
bit.a 1个bit ,bit.b 3个bit,bit.c 是4个bit,自然对齐为何总大小是4了呢?

论坛徽章:
0
4 [报告]
发表于 2006-08-23 16:26 |只看该作者
这里的4是指4个byte, 是按照unsigned来对齐的,unsigned在32位的系统中就是4 bytes.

论坛徽章:
0
5 [报告]
发表于 2006-08-23 16:44 |只看该作者
晕,那bit结构中内存怎么分布呢?

struct test
{
unsigned short a : 4;
unsigned short b : 5;
unsigned short c : 7;
}test;
排列= aaaa0000 bbbbb000 ccccccc0 ?
sizeof(test)=2,a和b难道是排列在1个byte里吗?不是的话sizeof(test)为何=2?

struct test
{
unsigned short a : 4;
unsigned short b : 5;
unsigned short c : 8;
}test;
sizeof(test)=4?
排列= aaaa0000bbbbb000cccccccc00000000 ?

论坛徽章:
0
6 [报告]
发表于 2006-08-23 22:24 |只看该作者
谁能仔细解释一下呢?

论坛徽章:
0
7 [报告]
发表于 2006-08-23 22:45 |只看该作者
谁能仔细解释一下呢?

原帖由 Nety2004 于 2006-8-23 16:26 发表
这里的4是指4个byte, 是按照unsigned来对齐的,unsigned在32位的系统中就是4 bytes.


Nety2004的解释很清楚了吧,你的也是32位的系统吧,系统为了对齐,所以申请的内存最小单位是32位,也就是4个byte

论坛徽章:
0
8 [报告]
发表于 2006-08-24 09:09 |只看该作者
首先unsigned等同于int的大小,一共是4个字节。由于a占1个位,b占3位,c占4位,所以一共是8为,也就是1个字节。但unsigned是4个字节,由于对齐的原则所以sizeof(bit)也就等用于sizeof(int)了,也就是4个字节。明白了?

论坛徽章:
0
9 [报告]
发表于 2006-08-24 09:12 |只看该作者
还有就是如果都是short型(2字节)。如果你定义的位数超过2个字节就自动对其INT型(4字节)。一次类推!!!明白了吗?

论坛徽章:
0
10 [报告]
发表于 2006-08-24 09:39 |只看该作者
谢谢以上几位的回答!
实际上我的疑问是:
struct test
{
unsigned short a : 4;
unsigned short b : 5;
unsigned short c : 7;
}test;
内存排列是什么? aaaa0000 bbbbb000 ccccccc0 00000000?还是aaaabbbb bccccccc ?
sizeof(test)=2,看样子应该是后者,但a和b难道是排列在1个byte里吗?同一个位域应该是存储在同一个字节中,不能跨两个字节才对呀!
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP