2013-08-10 2 views
1

Есть ли общая реализация lisp, которая позволяет изменять размер стека во время выполнения? Как насчет размера кучи?Общая реализация lisp Изменение размера стека во время выполнения

Я использую sbcl и, по-видимому, они определены при запуске исполняемого файла и не могут быть изменены впоследствии.

+0

Что вы намерены достичь с этим? Тот факт, что вы играете в стек динамически, немного нечетно – jozefg

ответ

4

Например, ECL и LispWorks могут расширить стек во время выполнения. Можно видеть, что оба также предлагают перезагружается, когда есть переполнение стека, чтобы увеличить размер стека, если это необходимо:

СТЭК:

> (defun s (n) 
    (if (zerop n) 0 (+ 1 (s (1- n))))) 

S 

> (s 100000) 

Condition of type: STACK-OVERFLOW 
C-STACK overflow at size 4259840. Stack can probably be resized. 

Available restarts: 

1. (CONTINUE) Extend stack size 
2. (RESTART-TOPLEVEL) Go back to Top-Level REPL. 

Broken at S. In: #<process TOP-LEVEL>. 
>> 

Смотрите документацию управления памятью ЭСЛ по адресу: http://ecls.sourceforge.net/new-manual/re86.html

LispWorks:

CL-USER 31 > (s 1000) 

Stack overflow (stack size 15997). 
    1 (continue) Extend stack by 50%. 
    2 Extend stack by 300%. 
    3 (abort) Return to level 0. 
    4 Return to top loop level 0. 

Type :b for backtrace or :c <option number> to proceed. 
Type :bug-form "<subject>" for a bug report template or :? for other options. 

Переменная в LispWorks позволяет настроить: SYSTEM:*STACK-OVERFLOW-BEHAVIOUR*. См. http://www.lispworks.com/documentation/lw61/LW/html/lw-1440.htm#marker-887330.

куча растет автоматически в большинстве реализаций, запрашивая больше памяти из операционной системы. Следующий вопрос тогда будет: может ли куча сжиматься?

+0

Как насчет ccl? Из любопытства было бы сложно реализовать динамически изменяемый размер в sbcl? – stackman

+0

@stackman: В CCL вы можете установить размер стека потока, если вы начнете новый. Насколько сложно реализовать в SBCL? Понятия не имею. Вы должны спросить у разработчиков. –

Смежные вопросы