阅读:1759回复:5
c/c++的奇怪问题(20分已给)
代码如下:
typedef struct _HEADER_DATA { ETHERNET_HEADER EtherHeader; union { struct { IP_HEADER IpHeader; }; struct { LLC_SNAP LlcSnap; IP_HEADER LlcIpHeader; }; }; }HEADER_DATA, *PHEADER_DATA; 结果很奇怪: sizeof(ETHERNET_HEADER) 为14; sizeof(LLC_SNAP) 为8; sizeof(IP_HEADER) 为60; sizeof(HEADER_DATA) 却不是14+8+60=82,而是84,多出了两个字节。 以下的代码也会出问题: PHEADER_DATA pData; 然后pData->IpHeader.***的成员变量都往后移了两个字节,也就是说用pData->IpHeader.ipProtocol得到的是pData->IpHeader.ipProtocol后面的pData->IpHeader.ipAddress了。 我怎么也找不原因,各位帮我查查吧,谢谢。 [编辑 - 5/17/04 by nicklezhang] |
|
沙发#
发布于:2004-05-17 16:43
但是如果我改成4bytes或1byte对齐,那如果遇到象_IRP这样的结构,例如IO Manager传下来的Irp,岂不是和我的驱动程序中的用法冲突?谢谢
|
|
板凳#
发布于:2004-05-17 16:45
我的意思是,IO Manager传下来的Irp是8byte对齐的,而在我的驱动程序编译选项中是1byte对齐,这样访问Irp中的成员变量时岂不就要出错?
|
|