typedef struct BaseMessage
{
int u32DeviceID : 32;
int u32CoreID : 32;
unsigned int u16Class : 16;
unsigned int u8OpCode : 8;
unsigned int u16CRC : 16;
} BaseMessage;
typedef struct MessageWithParameters
{
BaseMessage base;
int u8Param1 : 8;
int u8Param2 : 8;
} MessageWithParameters;
typedef struct FullMessage
{
int u32DeviceID : 32;
int u32CoreID : 32;
unsigned int u16Class : 16;
unsigned int u8OpCode : 8;
unsigned int u16CRC : 16;
int u8Param1 : 8;
int u8Param2 : 8;
} FullMessage;
int main()
{
printf("%d", sizeof(MessageWithParameters));
printf("%d", sizeof(FullMessage));
}
在MessageWithParameters
一個struct實例不會在BaseMessage
本身需要一定的規模?
即使它在堆棧上?
我猜測編譯器將MessageWithParameters
變成看起來像FullMessage
的東西。
我正確嗎?兩個結構的尺寸都是一樣的,雖然他們中的一個在他們
你爲什麼期望這些結構具有不同的尺寸,或者你問他們爲什麼有不同的尺寸? – nos 2010-08-12 08:45:35
因爲BaseMessage基礎應該自行調整大小。我期望MessageWithParameters採用更大的尺寸,然後FullMessage,因爲MessageWithParameters包含BaseMessage。 – 2010-08-12 08:56:14
它在我的機器上。雖然FullMessage和MessageWithParameters之間沒有關係 - 因此,您爲什麼認爲它們應該具有相同/不同的大小。 – nos 2010-08-12 14:19:00