yux008007
驱动牛犊
驱动牛犊
  • 注册日期2003-10-12
  • 最后登录2004-12-17
  • 粉丝0
  • 关注0
  • 积分1分
  • 威望1点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
阅读:1072回复:4

晕乎乎,大家来看看这个结构体的大小到底是多少?

楼主#
更多 发布于:2004-05-19 11:57
下面是一个和ATA SMART Attribute相对应的结构体:
typedef struct _INDIVIDUALATTRIBUTE
{
BYTE bAttribteID;
struct {
USHORT bPrefailure:1;
USHORT bVendorSpecific:5;
USHORT bReserved:10;
} bStatusFlag;
BYTE bAttributeValue;
char  bVendorSpecific[8];
} INDIVIDUALATTRIBUTE, *PINDIVIDUALATTRIBUTE;
我本意让它的大小为12,但是用sizeof一看居然是14!
请高手指点,多谢!

按照下面的参考定义的:
Attribute ID number (0x01 to 0xFFh) 1 binary Rd only
Status flags 2 bit flags Rd only
Pre-failure/advisory bit
Vendor specific (5 bits)
reserved (10 bits)
Attribute value (valid values from 0x01 to 0xFEh) 1 binary Rd only
0x00 invalid for attribute value - not to be used
0x01 minimum value
0x64 initial value for all attributes prior to any data
collection
0xFD maximum value
0xFE value is not valid
0xFF invalid for attribute value - not to be used
Vendor specific 8 binary Rd only
Total bytes 12
aha_here
驱动小牛
驱动小牛
  • 注册日期2003-10-11
  • 最后登录2009-03-07
  • 粉丝0
  • 关注0
  • 积分10分
  • 威望1点
  • 贡献值0点
  • 好评度1点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2004-05-19 12:11
这东西好象有个4字节对齐的问题,不同的编译器会有不同的结果!
[size=3][color=red]勤学好问[/color][/size] [img]http://www.driverdevelop.com/forum/avatar/aha_here_xiao_zu.gif[/img]
snowStart
驱动老牛
驱动老牛
  • 注册日期2004-04-06
  • 最后登录2011-06-02
  • 粉丝0
  • 关注0
  • 积分95分
  • 威望19点
  • 贡献值177点
  • 好评度1点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2004-05-19 12:54
我看应该是16个= 1 + 3*2 + 1 + 8,
12怎么算出来的,如果bStatusFlag 是union为12

字节对齐可以自己设置
学习,关注,交流中... [email=fengyu@163.com]Email:snowstarth@163.com[/email] [url]http://bbs.zndev.com/?a=snowStart[/url]
arthurtu
驱动巨牛
驱动巨牛
  • 注册日期2001-11-08
  • 最后登录2020-12-19
  • 粉丝0
  • 关注0
  • 积分26分
  • 威望161点
  • 贡献值0点
  • 好评度35点
  • 原创分0分
  • 专家分0分
  • 社区居民
地板#
发布于:2004-05-19 13:20
Attribute ID number (0x01 to 0xFFh) 1 binary Rd only
Status flags 2 bit flags Rd only
Pre-failure/advisory bit
Vendor specific (5 bits)
reserved (10 bits)
Attribute value (valid values from 0x01 to 0xFEh) 1 binary Rd only
Total bytes 12


#pragma pack(1)
typedef struct _INDIVIDUALATTRIBUTE
{
BYTE xx;
USHORT xx;
BYTE xx;
BYTE xx[8];
}INDIVIDUALATTRIBUTE, *P...
#pragma pack(pop)

so, 1 + 2 + 1 + 8 = 12
yux008007
驱动牛犊
驱动牛犊
  • 注册日期2003-10-12
  • 最后登录2004-12-17
  • 粉丝0
  • 关注0
  • 积分1分
  • 威望1点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
地下室#
发布于:2004-05-19 13:22
这东西好象有个4字节对齐的问题,不同的编译器会有不同的结果!

多谢!
游客

返回顶部