PDA

Просмотр полной версии : 4 Out of memory. Или куда уходит память на 48K???



yazhivoy
01.03.2021, 17:45
Привет, друзья. Прошу помощи.
Без предысторий причин, сразу к сути.
Написал программу на basic для 48K - генерация случайного идеального лабиринта (и дальнейшее его прохождение) (алгоритм здесь (https://habr.com/ru/post/262345/), кому интересно).
Ячейка лабиринта - одно знакоместо на экране.
Всё это дело "управляется" 8-ю символьными массивами, описывающими состояние ячейки (вид ячейки, посещена или нет, координаты "отката", наличие выхода С-Ю-В-З) и десятком вспомогательных символьных переменных.
Вся программа основана на операторах IF...THEN.
Зациклив генерацию (пропуская прохождение), приблизительно на 12 круге (при максимальном размере лабиринта 21x32 символа) вываливается ошибка Out of memory.
Вопрос. Куда уходит память? На вычисления (как это узнать вообще)? Можно ли как-то "почистить" её на новом круге генерации, не затрагивая значения вспомогательных символьных переменных?
В архиве листинг программы TEST.b82 (просмотр и редактирование - блокнот, открытие - эмулятор EightyOne), .tap и .sna (сэйв на 12 круге).
Изначально большинство переменных были числовые, но тогда память кончалась еще раньше.
Генерация ну оооочень медленная (в частности из-за функции VAL перевода символов в число). В Spectaculator при 14 МГц и на скорости 20x генерация одного максимального лабиринта занимает около 20 секунд.

goodboy
01.03.2021, 18:12
вываливается ошибка Out of memory. Вопрос. Куда уходит память?
что такое стек - знаешь ?
в программе явно есть ошибка. стек лихо ползёт вниз.
у тебя похоже выход из gosub без return (вот адреса возврата и скапливаются на стеке)

yazhivoy
01.03.2021, 18:27
у тебя похоже выход из gosub без return
спасибо! да, есть там такой грешок. попробую поправить. стек - не знаю. знания на уровне кружка информатики 90-х :)

Raydac
01.03.2021, 18:31
рекурсия наверное слишком глубокая гдет

yazhivoy
01.03.2021, 19:39
goodboy, поправил выходы из go sub. ошибка ушла! спасибо еще раз!

goodboy
01.03.2021, 20:03
на будущее попробуй пакет basin http://arda.kisafilm.org/fish/get/serve.php?b=BasinC1700.zip&d=14&s=9709
там внешний редактор бейсика + эмулятор.
во время выполнения программы можно много всего мониторить
.......................
как раз хорошо видно (твой случай) как накапливаются адреса возврата