Mateusz Chromiński
Mateusz Chromiński

Reputation: 2832

Library, which helps packing structures with good performance

Days ago I heard (maybe I've even seen it!) about library, that helps with packing structures. Unfortunately - I can't recall it's name.

In my program I have to keep large amount of data, therefore I need to pack them and avoid loosing bits on gaps. For example: I have to keep many numbers from range 1...5. If I would keep them in char - it would take 8bits, but this number can be kept on 3 bits. Moreover - if I would keep this numbers in packs of 8bits with maximum number 256 I could pack there 51 numbers (instead of 1 or 2!).

Is there any librarary, which helps this actions, or do I have do this on my own?

Upvotes: 2

Views: 121

Answers (1)

Constantinius
Constantinius

Reputation: 35049

As Tomalak Garet'kal already mentioned, this is a feature of ANSI C, called bit-fields. The wikipedia article is quite useful. Typically you declare them as structs.

For your example: as you mentioned you have one number in the range of 0..5 you can use 3 bits on this number, which leaves you 5 bits of use:

struct s
{
    unsigned int mynumber : 3;
    unsigned int myother : 5;
}

These can now be accesses simply like this:

struct s myinstance;
myinstance.mynumber = 3;
myinstance.myother = 1;

Be awared that bit fields are slower than usual struct members/variables, since the runtime has to perform bit-shifting/masking to allow access to simple bits.

Upvotes: 1

Related Questions