G'day all. On Mon, Aug 05, 2002 at 05:39:19PM -0700, Hal Daume III wrote:
2) Could someone tell me what 'alignment' is [...]
On many architectures, data must be stored at an address which is an integer multiple of some small number (often 2, 4 or 8, depending on the data and on the architecture). Even where it is not a requirement of the architecture, it's often faster to align data so that it does not require more than one bus cycle to fetch and/or store, and so that it doesn't span a cache line boundary. This number is called the "alignment", and a good rule of thumb for computing it is: instance Storable a where alignment a = sizeOf a `min` machine_word_size where machine_word size is 4 for 32-bit architectures, 8 for 64-bit architectures and so on. Note that the above formula may not work in some situations (e.g. when sizeOf a < machine_word_size but sizeOf a is not a power of 2, or when a is a strange machine-specific type, like a DMA buffer or a hardware page). In general, you just have to know what the alignment of some type is. Cheers, Andrew Bromage