版块
论坛
喜欢
话题
应用
搜索
登录
注册
nicklezhang的个人空间
访问量
1
新鲜事
帖子
资料
http://bbs3.driverdevelop.com/index.php?m=space&uid=78966
c/c++的奇怪问题(20分已给)
代码如下:typedefstruct _HEADER_DATA{ETHERNET_HEADEREtherHeader;union {struct { IP_HEADER IpHeader; };struct { LLC_SNA...
全文
回复
(
5
)
2004-05-15 18:37
来自版块 -
NDIS网络接口开发
◆
◆
表情
告诉我的粉丝
提 交
arthurtu
:
把所有的结构都设置成1byte对齐显然不是好主意 用#pragma pack(1) #pragma pack(pop)
(2004-05-18 12:19)
回复
bingjie
:
呵呵,这个我也没试过
(2004-05-17 22:38)
回复
nicklezhang
:
我的意思是,IO Manager传下来的Irp是8byte对齐的,而在我的驱动程序编译选项中是1byte对齐,这样访问Irp中的成员变量时岂不就要出错?
(2004-05-17 16:45)
回复
nicklezhang
:
但是如果我改成4bytes或1byte对齐,那如果遇到象_IRP这样的结构,例如IO Manager传下来的Irp,岂不是和我的驱动程序中的用法冲突?谢谢
(2004-05-17 16:43)
回复
bingjie
:
这是结构对齐的问题,MS C编译器对结构编译时默认是4字节对齐的,VC++是8字节对齐,实际上当结构的成员不是4字节对齐时编译器会自动插入隐含的成员变量导致整个结构按照4字节对齐。由于你的EtherHeader是14字节,所以编译器在其后插入了2字节,导致你其它的结构到偏移都后移...
(2004-05-15 21:16)
回复
nicklezhang
加关注
写私信
0
关注
0
粉丝
84
帖子
返回顶部