Библиотека, которая помогает упаковывать структуры с хорошей производительностью - PullRequest
2 голосов
/ 20 октября 2011

Дней тому назад я слышал (возможно, я даже видел это!) О библиотеке, которая помогает с упаковочными структурами.К сожалению - я не могу вспомнить его название.

В моей программе мне нужно хранить большое количество данных, поэтому мне нужно их упаковать и избежать потери битов на пропусках.Например: я должен сохранить много чисел в диапазоне 1 ... 5.Если бы я держал их в символе - это заняло бы 8 бит, но это число можно сохранить в 3 битах.Более того - если бы я хранил эти числа в упаковках по 8 бит с максимальным числом 256, я мог бы упаковать туда 51 число (вместо 1 или 2!).

Есть ли библиотекарь, который помогает этим действиям, или ясделать это самостоятельно?

1 Ответ

1 голос
/ 20 октября 2011

Как уже упоминал Томалак Гареткал, это особенность ANSI C, называемая битовыми полями. Статья в Википедии весьма полезна. Обычно вы объявляете их как структуры.

Для вашего примера: как вы упомянули, у вас есть одно число в диапазоне 0..5, вы можете использовать 3 бита для этого числа, что оставляет вам 5 битов использования:

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

Теперь они могут быть доступны просто так:

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

Имейте в виду, что битовые поля на медленнее , чем обычные элементы / переменные структуры, поскольку среда выполнения должна выполнять сдвиг / маскирование битов, чтобы обеспечить доступ к простым битам.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...