Есть ли возможная оптимизация для случайного доступа на очень большом массиве (в настоящее время я использую uint8_t
, и я спрашиваю, что лучше)
uint8_t MyArray[10000000];
когда значение в любой позиции массива
- 0 или 1 для 95% всех случаев,
- 2 в 4% случаев,
- между 3 и 255 в других 1% случаев?
Итак, есть ли что-нибудь лучше, чем массив uint8_t
для этого? Это должно быть как можно быстрее, чтобы перебрать весь массив в произвольном порядке, и это очень сильно влияет на пропускную способность ОЗУ, поэтому, когда у него больше нескольких потоков, выполняющих это одновременно для разных массивов, в настоящее время вся полоса пропускания ОЗУ быстро насыщается.
Я спрашиваю, потому что кажется очень неэффективным иметь такой большой массив (10 МБ), когда на самом деле известно, что почти все значения, кроме 5%, будут либо 0, либо 1. Поэтому, когда 95% всех значений в массиве на самом деле понадобится только 1 бит вместо 8 бит, это уменьшит использование памяти почти на порядок. Похоже, что должно быть более эффективное решение для памяти, которое значительно сократило бы пропускную способность ОЗУ для этого, и в результате также будет значительно быстрее для произвольного доступа.