Проблема, с которой вы сталкиваетесь, заключается в том, что вы пытаетесь создать 100 * 100 * 100 * 100 * 50 списков по 5 элементов каждый, это 5 миллиардов списков с 25 миллиардами элементов. Короче говоря, он не вписывается в объем памяти, присвоенный lisp-изображению. Вероятно, он не поместится, даже если вы назначили всю свою память на lisp.
EDIT:
Давайте подсчитаем некоторые лучший случай нижних границ.
В списке acc
содержится 5 миллиардов элементов, то есть 5 миллиардов cons cells.
Максимальный объем памяти 32-битного компьютера может равняться 4GiB, поэтому 32bit не может быть и речи. 64-битные компьютеры могут использовать гораздо больше, но это также означает, что наши указатели будут в два раза длиннее.
Каждый cons cell должен иметь не менее 2 64-битных (8 байт) указателей. Кроме того, каждая ячейка cons должна иметь некоторые признаки того, что это cons cell, флаги для сборщика мусора, возможно флаги для нулевых значений и т. Д. Давайте притворимся, что мы можем сжать их в один байт. Таким образом, один из наших cons ячеек может вписываться в 1 + 2 * 8 байтов = 17 байт памяти.
5 млрд * 17 байт = 85 миллиардов байт ~ = 79GiB требуемой памяти
Каждый из этих 5 миллиардов списков содержит 5 минусы клетки:
25 млрд * 17 байт = 425 млрд bytes ~ = Требуется 396GiB необходимой памяти
И, наконец, каждая из этих 25 миллиардов ячеек содержит одно целое число. Это длинные ints в вашем случае, но с соответствующим объявлением вы могли бы сжать их в один байт на некоторых реализациях плюс один байт для указания типа, за исключением последней переменной m
, которая должна быть указана на два байта + типа. Поэтому целые числа каждого списка занимают не менее
4 * 2 + 3 байта = 11 байтов в списке для хранения целых чисел.
5000000000 списки * 11 байт = 55 миллиардов байт ~ = 51GiB памяти требуется
В общей сложности это составляет, по меньшей мере 526GiB пространства памяти и все назначенные на интерпретатор Лиспа - только для хранения ваши данные, не считая самого lisp-изображения, ОС и т. д. Он также требует оптимизированных целых чисел и оптимизированной реализации, которые могут сделать это в этих трудных условиях.
Там это решение:
- Купить пару терабайт SSD-х
- Назначают как своп
- ????
- Profit ...
И лодыри или здравомыслящих людей, есть один дешевый вариант:
http://en.wikipedia.org/wiki/Lazy_evaluation
Как о покупке компьютера, который поддерживает несколько списков? –
Почему бы не использовать многомерный массив? –
Хорошо, я за это, но я думаю, я не уверен, что это будет другое хранилище, чем использование списка списков .. (извините, если это основной вопрос) – myselfesteem