¿Alguna optimización para acceso aleatorio en una matriz muy grande cuando el valor en el 95% de los casos es 0 o 1?

¿Hay alguna optimización posible para el acceso aleatorio en una matriz muy grande (actualmente usouint8_t, y estoy preguntando sobre qué es mejor)

uint8_t MyArray[10000000];

cuando el valor en cualquier posición de la matriz es

0 o1 para 95% de todos los casos,2 in 4% de los casosEntre3 y 255 en el otro 1% ¿de los casos

Entonces, ¿hay algo mejor que unuint8_t matriz para usar para esto? Debería ser lo más rápido posible recorrer toda la matriz en un orden aleatorio, y esto es muy pesado en el ancho de banda de RAM, por lo que cuando hay más de unos pocos hilos haciendo eso al mismo tiempo para diferentes matrices, actualmente todo el ancho de banda de RAM se satura rápidamente.

Estoy preguntando, ya que se siente muy ineficiente tener una matriz tan grande (10 MB) cuando realmente se sabe que casi todos los valores, excepto el 5%, serán 0 o 1. Entonces, cuando el 95% de todos los valores en el La matriz solo necesitaría 1 bit en lugar de 8 bit, esto reduciría el uso de memoria en casi un orden de magnitud. Parece que tiene que haber una solución más eficiente en la memoria que reduzca en gran medida el ancho de banda de RAM requerido para esto, y como resultado también sea significativamente más rápido para el acceso aleatorio.

Respuestas a la pregunta(13)

Su respuesta a la pregunta