免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
123下一页
最近访问板块 发新帖
查看: 3164 | 回复: 20
打印 上一主题 下一主题

幼稚而又奇怪的问题 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2005-04-13 17:52 |只看该作者 |倒序浏览
定义了如下的结构:
struct AIntInfo
{
        unsigned int        Head;
        unsigned char          Time[6];               
        unsigned char            SetCmd;
};

结果我打印他的大小:
main()
{
   struct AIntInfo AIntInfo;
   int plen;
   plen=sizeof(AIntInfo);  
   printf("len=%d\n",plen);
}
却出现了不可思议的结果
len=12
明明我数的是11呀.
我在两个系统上都是如此,linux as 3 和solaris 9,why????

论坛徽章:
0
2 [报告]
发表于 2005-04-13 19:01 |只看该作者

幼稚而又奇怪的问题

word alignment problem

论坛徽章:
0
3 [报告]
发表于 2005-04-13 19:09 |只看该作者

幼稚而又奇怪的问题

字节对齐问题,翻一翻以前的贴子,这个问题讨论过很多次。

论坛徽章:
0
4 [报告]
发表于 2005-04-13 21:41 |只看该作者

幼稚而又奇怪的问题

CPU为了寻址效率,采用“对齐”的概念,其单位是一个机器字

在intel x86上是4字节对齐

论坛徽章:
0
5 [报告]
发表于 2005-04-13 23:17 |只看该作者

幼稚而又奇怪的问题

这是以空间换时间,为了提高寻址的速度!

论坛徽章:
0
6 [报告]
发表于 2005-04-14 10:26 |只看该作者

幼稚而又奇怪的问题

我也觉得结构体AIntInfo大小为:
  1. unsigned int Head;               /*4 byte*/
  2. unsigned char   Time[6];                /*6 byte*/
  3. unsigned char     SetCmd;             /*1 byte*/
复制代码

应该是11啊?

难道对于结构体,编译器还另加了一个结束符??

劳请高手指教!

ps:什么又是字节对齐啊?

论坛徽章:
1
荣誉版主
日期:2011-11-23 16:44:17
7 [报告]
发表于 2005-04-14 11:41 |只看该作者

幼稚而又奇怪的问题

原帖由 "kernelxu" 发表:
应该是11啊?

难道对于结构体,编译器还另加了一个结束符??

劳请高手指教!

ps:什么又是字节对齐啊?


用google搜索什么是字节对齐。

论坛徽章:
0
8 [报告]
发表于 2005-04-15 21:55 |只看该作者

幼稚而又奇怪的问题

原帖由 "lenovo" 发表:


用google搜索什么是字节对齐。




这可是万能的!!

论坛徽章:
0
9 [报告]
发表于 2005-04-19 11:19 |只看该作者

幼稚而又奇怪的问题

谢谢大家的回复,我基本上了解了字节对齐的问题,但是现在我用__attribute__((packed))来去掉默认对齐时,系统总是不认识,编译时出以下错误:
Syntax error at line 74, column 26, file thread.h:
Error at line 74, column 26 in file thread.h
}__attribute__((packed)) IntInfo;
.........................1
PCC-S-02201, Encountered the symbol "IntInfo" when expecting one of the followi
ng:

   ; , = ( [
The symbol ";" was substituted for "IntInfo" to continue.


我用的系统是Solaris 9,不知是我的系统gcc安装缺少哪个包呢,还是哪个头文件没有inclue,或者编译时应该加上什么选项呢,请高手指教!

论坛徽章:
0
10 [报告]
发表于 2005-04-19 18:29 |只看该作者

幼稚而又奇怪的问题

我的定义如下:

type struct IntInfo {
        uint32_t        AHead;
        uint8_t         Time[6];
        uint8_t         ACmd;       
}__attribute__ ((packed)) IntInfo;

struct IntInfo {
        uint32_t        AHead;
        uint8_t         Time[6];
        uint8_t         ACmd;       
}__attribute__ ((packed)) ;
两种定义都编译不成功,
还有我在linux下编译没问题,因此,我怀疑是solaris包安装不成功,但是我同事编译就是成功的
我的程序与他不同的是,我是pro*c程序,而他不是,
不知道哪里的问题,郁闷阿,有谁能帮忙阿
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP