Как структурировать вещи, будет зависеть от того, какие у вас данные. Для представления больших объемов данных вам понадобятся длинные нули или единицы. Это избавило бы от необходимости представлять его заново. Если это не так, и у вас примерно одинаковое количество единиц и нулей, вам лучше использовать всю память.
Это может помочь воспринимать это как проблему сжатия. Чтобы сжатие было эффективным, должен быть шаблон (или ограниченный набор элементов, используемых из всего пространства) и неравномерное распределение, чтобы сжатие работало. Если все элементы используются и распределены равномерно, сжатие сделать сложно или может занять больше места, чем фактические данные.
Если есть только серии нулей и единиц (более одного), использование смещения и длины может иметь некоторый смысл. Если есть противоречивые прогоны, вы можете просто скопировать биты в виде битового массива, где у вас есть смещение, длина и значения.
Насколько это эффективно, зависит от того, есть ли у вас большие пробеги единиц или нулей. Вы должны быть осторожны, чтобы убедиться, что вы не используете больше памяти для повторного представления вашей памяти, а просто используете саму память (т.е. вы используете больше памяти для представления памяти, чем просто помещаете ее в память).