> For efficiency reasons many CPUs require particular primitive data > types (integers/pointers of various sizes) to be placed in memory at > particular boundaries. For example, shorts ("H" above, usually two bytes > and probably always so in the struct module) are often required to be > on even addresses, and longer objects to be on 4 or 8 byte boundaries. > > This allows for much more efficient memory access on many platforms > (of course the rules depend on the platform). Although RAM _appears_ to > the random access to arbitrary bytes, the underlying hardware will often > fetch chunks of bytes in parallel. If a number spanned the boundaries of > such a chunk it would require two fetch cycles instead of one. So > this is avoided for performance reasons. > > So, packing "HB" puts a short at offset 0 (even) and then a byte. > Conversely, packing "BH" puts a byte at offset zero but puts the short > at offset 2 (to be even), leaving a gap after the byte to achieve this, > thus the 4 byte size of the result (byte, gap, short). > > This layout procedure is called "alignment". > > Cheers, > -- > Cameron Simpson <[EMAIL PROTECTED]> DoD#743 > http://www.cskk.ezoshosting.com/cs/
Thanks for taking the time to type a detailed, helpful response, Cameron. Much appreciated! -- http://mail.python.org/mailman/listinfo/python-list