# [plt-scheme] Bit manipulation in PLT Scheme

At Thu, 9 Mar 2006 01:10:54 +0000, "Paulo J. Matos" wrote:
>* I'm having the need to work in a somewhat low-level with bits and
*>* bytes, which I've never done in Scheme. I'm curious about if there's
*>* any performance or memory penalty by using bitfields in Scheme
*>* (SRFI-60) (is there any alternative to this in PLT-Scheme?). Will a
*>* bitfield of 64 bits occupy 64bits in memory or will I have a penalty?
*>* Will a logical 'and' between two bitfields have any performance
*>* penalty when compared to the same operation in C?
*
SRFI 60 is implemented in terms of MzScheme exact integers, MzScheme's
`bitwise-and', etc.
On a 32-bit platform, a 64-bit number will take at least 128 bits,
because 64 bites are used for header and length information in a
bignum. Operations will be much more expensive than in C, because a
bignum allocation will be required.
On a 64-bit platforms, many of the numbers will turn out to fit in 62
bits, and so they'll be unboxed fixnums. The operations will be a
little more expensive than in C, because there will be a type test to
check that the number is a fixnum (but this is small compared to boxing
overhead).
When I need fast 32-bit numbers with bit operations, I use a pair of
16-but numbers, and I write functions that return the pair through
multiple values (to avoid even allocating a cons cell for the pair).
Managing the pair can be tedious, and to handle 64 bits this way, you'd
need a triple of numbers (on a 32-bit platform).
Matthew