2017-02-22 14 views
0

Минимальное количество байтов, необходимых для хранения следующий объект:Минимальное количество байтов требуется

  1. Integer - между 0 - 364847
  2. Integer - между 0 - 37337
  3. Страница Статус
    • В (я буду использовать один бит)
    • Бесплатно
    • Dirty
  4. Режим
    • Read Only
    • Запись только
    • Выполнить Только
    • Чтение Запись
    • Read Execute
    • Чтение Запись Выполнение

Я думаю, потребуется минимум 6 байт, но я не уверен. Кроме того, можем ли мы использовать неиспользуемые биты внутри байта для хранения состояния страницы и режима?

+0

Сколько миллиардов записей вы храните, что вам нужно заботиться о каждом драгоценном бите? – tadman

ответ

1

Теоретический предел (с арифметической упаковкой) составляет log2(364848*37338*3*6) = 37.8352180528... бит на запись, которая меньше 5 байт. Но доступ к таким пакетам данных потребует дорогостоящих целых делений. Подумайте, если вы действительно этого хотите.

Если вы позволяете каждому полю занимать отдельные биты, вы получаете ceil(log2(364848))+ceil(log2(37338))+ceil(log2(3))+ceil(log2(6)) = 40 бит, что составляет точно 5 байт и обеспечивает быстрый доступ с помощью простых сдвигов бит и маскировки.

+0

Спасибо. Разве мы не можем использовать только 3 бита для режима? Если это RW, тогда установите Read = 1 и Write = 1 и так далее. 'ceil (log2 (364848)) + ceil (log2 (37338)) + ceil (log2 (3)) + ceil (log2 (3)) = 39' – Kattu

+0

@ Kattu' 6' - это количество состояний, а не количество бит. Это будет 'ceil (log2 (364848)) + ceil (log2 (37338)) + ceil (log2 (3)) + 3', что на самом деле то же самое 40 бит, так как' ceil (log2 (6)) = 3 '. –

Смежные вопросы