С маленькими жизненными вселенными довольно часто заставляют их оборачиваться со всех сторон (чтобы создать тороидальную вселенную), но это требует двойной буферизации. В вашем случае это требует 3 КБ ОЗУ, но у вас есть только 2 КБ.
Если вы не заключаете в оболочку, вам не нужно делать двойной буфер всей вселенной. Вам просто нужно избегать перезаписи ячеек, прежде чем вы закончите использовать их в качестве входных данных для вычисления.
Скажите, что ваша вселенная представлена в виде обычного растрового изображения. Мы будем рассматривать это как последовательность строк, расположенных последовательно в памяти. Скажем, вселенная состоит из четырех строк, пронумерованных от 0 до 3.
0
1
2
3
4
...
Когда вы вычисляете следующее поколение, новая версия строки 3 вычисляется с использованием строк 2, 3 и 4 (которая пуста). Вы можете написать новую версию строки 3 поверх строки 4. Аналогичным образом вычислите новую строку 2 из строк 1,2,3 и запишите ее поверх строки 3, так как эти данные больше не нужны после вычисления строки 2. Новая строка 1 вычисляется из строк 0,1,2 и записывается в строку 2.
Это означает, что вам нужна память только для одной дополнительной строки. 97 * 128 бит - это 1552 байта.
Недостаток в том, что ваша вселенная прокручивает память, и у вас должен быть какой-то механизм, чтобы справиться с этим. Либо скопируйте его обратно в исходное положение после каждого вычисления (что является медленным), либо сделайте так, чтобы его можно было отображать из любой позиции в памяти, и убедитесь, что ваши системы вычислений и отображения могут переходить с высоких на низкие адреса.