logo
TurboProlog / Документация / TOM_2

Экономия ресурсов памяти.

Во время выполнения программы память используется для нескольких

различных нужд; в зависимости от намерений, скудные ресурсы памяти могут

быть сэкономлены разными методами.

# Стек используется для пересылки параметров и точек возврата.

Чтобы минимизировать использование стека, избегайте ненужного не-

детерминизма; используйте директиву check_determ, чтобы просле-

дить за установкой прерывателей (cuts). Также используйте преиму-

щества сокращения хвостовой рекурсии, записывая ваши предикаты

так, чтобы они были рекурсивными.

# Глобальный стек используется для построения строк и структур.

Для того, чтобы сохранить место в глобальном стеке, пишите вашу

программу так, чтобы внешний цикл был циклом repeat...fail.

# Память для следа редко бывает проблемой в Турбо Прологе. Одна-

ко, первое, что надо делать, если система жалуется на переполне-

ние следа - это избегать использования доменов reference. Если вы

хотите использовать домены reference, вы должны сократить число

точек возврата, применяя прерыватели (используйте check_determ).

Комбинация repeat...fail также освобождает след. Наконец, переде-

лайте вызовы ваших предикатов так, чтобы создать поменьше ссылоч-

ных переменных. Если все это невозможно (или не решает проблему с

переполнением следа), то вы можете увеличить размер следа.

# Куча используется для вставки фактов в базу данных и размещения

в памяти оконных буферов, файловых буферов, драйверов графики,

таблиц базы данных и т.д. Эти области автоматически освобождают-

ся, когда удаляются факты, закрываются окна и т.д.