Mail Archives: djgpp/1996/05/09/11:35:51
> From: kagel AT quasar DOT bloomberg DOT com
> j DOT aldrich AT genie DOT com responded on 05/08/96 3:15 UTC
>
> Each of your 2-byte fields gets another 2 bytes of padding on it, for
> a total of 260. There IS a workaround, though, in the form of the gcc
> __attribute__ ((packed)) command. See my last post for details.
>
> Not quite. Actually, each field does NOT need word-alignment. Only objects
> whose size is >= 4 bytes (long, int, float, long long & double [did I miss
> any?]) require word (4byte) address alignment. The member TotalMemory is not
> padded as both it and the char array Info require 2byte alignment. The extra
> two bytes are added at the end of the structure to insure that each element of
> an array of _VGAInfoBlock's will each have their first member, VESASignature,
> aligned.
IMHO, only char is never aligned. Any field crossing 4-byte memory boundary
should be aligned at the boundary, so it can be fetched from memory at once.
If a field is larger than 4 bytes, then it should be aligned so that it
crosses not more than (size-1)/4 such boundaries.
The reasin for that is memory ability to retrieve only aligned words,
so if a word crosses 4-byte boundary processor actually need to retrieve
two words, that take more time of course.
Some processors (mostly RISC, IMHO) can't retrieve not aligned words at all.
- Raw text -