Hi,

There's a potential optimization I mentioned on the Lisp inspired
transforms page, where you could reorder bitfields in order to pack them
most efficiently.  Eerily, someone at my job just committed something
that did just that.  We have a custom defstruct, called defstruct-bv,
which allows you to specify bit fields.  (Lisp doesn't come with
bitfields.)  Here's the checkin message:

Log:
At compile time, automatically optimize the layout of bits in a
defstruct-bv definition to minimize the number of words used by the
resulting struct.

This is an instance of the bin-packing problem, which is NP-hard.
Fortunately, it has a good heuristic solution, first-fit decreasing,
which gets very close to optimal answers. I just implemented that as
a wrapper around the existing defstruct-bv, which I renamed
defstruct-bv-internal.

There is no longer any reason to worry about the order of bit field
definitions within a lisp struct.

If you have a struct that you don't want this to happen to (perhaps
because you have a performance consideration for the layout), add
(:optimize-p NIL) as an option to defstruct-bv.

I was somewhat disappointed with the results: most of our structs were
already laid out as optimally as this algorithm is able to achieve.
The single exception was the faring-atom struct, which got 16 bytes
smaller.

Best,
Martin

_______________________________________________
Cython-dev mailing list
[email protected]
http://codespeak.net/mailman/listinfo/cython-dev

Reply via email to