游戏开发论坛

 找回密码
 立即注册
搜索
查看: 4158|回复: 7

哪位给讲下这个是什么意思?

[复制链接]

3

主题

9

帖子

9

积分

新手上路

Rank: 1

积分
9
发表于 2007-10-11 16:29:00 | 显示全部楼层 |阅读模式
仔细设计结构中元素的布局与排列顺序,使结构容易理解、节省占用空间,并减少引起误用现象。
   说明:合理排列结构中元素顺序,可节省空间并增加可理解性。
   示例:如下结构中的位域排列,将占较大空间,可读性也稍差。
    typedef struct EXAMPLE_STRU
    {
     unsigned int valid: 1;
     PERSON person;
     unsigned int set_flg: 1;
    } EXAMPLE;

   若改成如下形式,不仅可节省1字节空间,可读性也变好了。
    typedef struct EXAMPLE_STRU
    {
     unsigned int valid: 1;
     unsigned int set_flg: 1;
     PERSON person ;
    } EXAMPLE;

上面那后面段为什么会节省空间呢?哪位达人给讲解下

103

主题

1432

帖子

1458

积分

金牌会员

Rank: 6Rank: 6

积分
1458
QQ
发表于 2007-10-11 17:00:00 | 显示全部楼层

Re:哪位给讲下这个是什么意思?

这个叫“位域”。
后面 : 1 表示使用1位。

位域的空间分配和组织方式有很大关系。
如果你分配了1位,下面分配一个字节。 那么你分配的这一位本身也要占用1字节。
但是你连续分配几个不足一字节的单元,那么他会共同使用同一字节。


第一个
: 1  --用了1字节
person; //阻隔了连续分配
: 1  --又用了1字节

第二个
:1  
:1  ---用了同一字节
person;

c/c++的结构,是经过硬件优化的,它的大小会根据不同的环境发生改变。一般的做法就是永远不要假定结构的大小,而通过 sizeof 关键字来判断。然后,再输入输出文件的场合,不要直接输出结构,而应该用不假定大小的方式来输出,输入。

2

主题

429

帖子

435

积分

中级会员

Rank: 3Rank: 3

积分
435
发表于 2007-10-11 21:29:00 | 显示全部楼层

Re:哪位给讲下这个是什么意思?

内存对齐

8

主题

99

帖子

141

积分

注册会员

Rank: 2

积分
141
发表于 2007-10-15 13:07:00 | 显示全部楼层

Re:哪位给讲下这个是什么意思?

呵呵 学习下。

3

主题

9

帖子

9

积分

新手上路

Rank: 1

积分
9
 楼主| 发表于 2007-10-16 23:28:00 | 显示全部楼层

Re:哪位给讲下这个是什么意思?

恩,明白了
感谢航天奇侠大侠的详细讲解

2

主题

29

帖子

29

积分

注册会员

Rank: 2

积分
29
QQ
发表于 2007-10-26 15:21:00 | 显示全部楼层

Re: 哪位给讲下这个是什么意思?

又学到东西了。。“位域”。。;看来以后设置多个标志的时候可以 考虑一下使用这个东东了。8个标志位只要分配一个字节就搞定了!
不过这里有个疑问:那你 用 unsign int 来申明,怎么就分配一个位呢?那如果用char 来声明是不是也是一样的效果呢?

103

主题

1432

帖子

1458

积分

金牌会员

Rank: 6Rank: 6

积分
1458
QQ
发表于 2007-10-26 17:00:00 | 显示全部楼层

Re:哪位给讲下这个是什么意思?

准确要查资料.一般只是记住相关概念.

6

主题

65

帖子

67

积分

注册会员

Rank: 2

积分
67
发表于 2007-10-26 20:06:00 | 显示全部楼层

Re:哪位给讲下这个是什么意思?

航天奇侠讲的好!
问一下奇侠,像这个结构中
typedef struct EXAMPLE_STRU
    {
     unsigned int valid: 1;
     unsigned int set_flg: 1;
     PERSON person ;
    } EXAMPLE;

valid和set_flg是不是只能赋0和1两个值
如果unsigned int valid: 2;是不是valid就能赋0-3的值了?
请高手讲一下
[em5]
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

作品发布|文章投稿|广告合作|关于本站|游戏开发论坛 ( 闽ICP备17032699号-3 )

GMT+8, 2025-6-19 21:52

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表