В чем смысл упаковки нескольких маленьких чисел в int32\64?

Недавно познакомился с упаковкой нескольких маленьких чисел в int32\64. В одних из исходников что я нашёл был упакована дата (год, месяц, день) в 32 битное число, в другое 32 числа (часы, минуты, секунды) времени, а потом это всё упаковано в одно общее 64 битное число. Тут нетрудно догадаться, что это лишние операции с маской и сдвигом, а лишние операции это лишнее время на выполнение.

В чем смысл такой упаковки о которой описал выше?

Или более общий вопрос (в случае если ответ на вопрос выше типо "Резоны автора кода что ты нашёл"). Вообще в чем смысл упаковки любых чисел и когда она может быть полезна?

P.s. есть мысли по поводу сокрытия инфы, но разве ради этого стоит тратить время на выполнение? (вопрос риторический, если я не ошибся конечно же)


Ответы (2 шт):

Автор решения: Kromster

Навскидку, упаковка может быть полезна тогда, когда:

  • гораздо чаще нужно сравнивать композитные сущности между собой, чем смотреть на их компоненты. Код сравнения будет гораздо короче и быстрее;
  • при ограничениях на свободное (дисковое) пространство;
  • при передаче данных по медленным каналам;
  • не важна, или даже нежелательна человеко-читаемость.

Кстати, вот вы пишете "операции с маской и сдвигом", а упакованы они как? Если упаковка идет строго по байтам, и тогда, к каждому компоненту можно обратиться просто разыменуя смещенный указатель на него.

→ Ссылка
Автор решения: gbg

Конкретно для времени, дело скорее всего кроется в BCD

Первая и главная причина что-то куда-то паковать - наличие векторных инструкций у процессора:

введите сюда описание изображения

Остальные причины также косвенно завязаны на железо - если какая-то железка типа часов отдает время в таком вот формате (BCD), то его могут и не декодировать, а так и таскать по системе дальше.

→ Ссылка