Мне нужно создать массив с 3 миллиардами булевых переменных. Моя память составляет всего 4 ГБ, поэтому мне нужно, чтобы этот массив был очень плотным (не более одного байта на переменную). Теоретически это должно быть возможно. Но я обнаружил, что Ruby использует слишком много места для одной логической переменной в массиве.Есть ли более легкая альтернатива массиву?
ObjectSpace.memsize_of(Array.new(100, false)) #=> 840
Это более 8 байт на переменную. Я хотел бы знать, есть ли более легкая реализация C-массивов в Ruby.
Помимо небольшого профиля, мне также нужен каждый булев этот массив, чтобы быть быстрым, потому что мне нужно как можно быстрее перевернуть их по требованию.
Использование растровых изображений. Имейте одну строку и просто переверните отдельные ее биты. Нет накладных расходов массива, 8 значений на байт. Круто, да? :) –
Почему вы просто не храните свои биты в целых числах? –
['NArray.byte'] (https://masa16.github.io/narray/) – cremno