structure alignment issues?
akcom
CppCoder at gmail.com
Wed May 31 17:31:42 PDT 2006
akcom wrote:
> Translating the following from windows:
>
> --- C Code:
>
> #define IMAGE_SIZEOF_SHORT_NAME 8
>
> typedef struct _IMAGE_SECTION_HEADER {
> BYTE Name[IMAGE_SIZEOF_SHORT_NAME];
> union {
> DWORD PhysicalAddress;
> DWORD VirtualSize;
> } Misc;
> DWORD VirtualAddress;
> DWORD SizeOfRawData;
> DWORD PointerToRawData;
> DWORD PointerToRelocations;
> DWORD PointerToLinenumbers;
> WORD NumberOfRelocations;
> WORD NumberOfLinenumbers;
> DWORD Characteristics;
> } IMAGE_SECTION_HEADER, *PIMAGE_SECTION_HEADER;
>
> #define IMAGE_SIZEOF_SECTION_HEADER 40
>
> --- D Code:
>
> const uint IMAGE_SIZEOF_SHORT_NAME = 8;
> const uint IMAGE_SIZEOF_SECTION_HEADER = 40;
>
> align struct ImageSectionHeader
> {
> BYTE Name[IMAGE_SIZEOF_SHORT_NAME];
> union Misc
> {
> DWORD PhysicalAddress;
> DWORD VirtualSize;
> }
> DWORD VirtualAddress;
> DWORD SizeOfRawData;
> DWORD PointerToRawData;
> DWORD PointerToRelocations;
> DWORD PointerToLinenumbers;
> WORD NumberOfRelocations;
> WORD NumberOfLinenumbers;
> DWORD Characteristics;
> }
> alias ImageSectionHeader IMAGE_SECTION_HEADER;
> alias ImageSectionHeader *PIMAGE_SECTION_HEADER;
>
> the problem is that ImageSectionHeader.sizeof == 36
> Any ideas as to why?
edit:
it appears as if when the union is replaced by a single DWORD,
everything works as expected. Should this be filed as a bug?
More information about the Digitalmars-d-learn
mailing list