Высокое потребление памяти во время компиляции может быть вызвано тем, что вы запрашиваете большое количество отладочной информации.Я попытался скомпилировать lapack
, что тоже не удалось.Бывает, что в моем ~/.sbclrc
у меня есть:
(sb-ext:restrict-compiler-policy 'debug 3)
(sb-ext:restrict-compiler-policy 'safety 3)
В новом SBCL политика компилятора выглядит следующим образом:
* (describe-compiler-policy)
Basic qualities:
COMPILATION-SPEED = 1
DEBUG = 3
SAFETY = 3
SPACE = 1
SPEED = 1
INHIBIT-WARNINGS = 1
Dependent qualities:
SB-C::CHECK-CONSTANT-MODIFICATION = 1 -> 3 (yes)
SB-C::TYPE-CHECK = 1 -> 3 (full)
SB-C::CHECK-TAG-EXISTENCE = 1 -> 3 (yes)
SB-C::LET-CONVERSION = 1 -> 0 (off)
SB-C:ALIEN-FUNCALL-SAVES-FP-AND-PC = 1 -> 3 (yes)
SB-C:VERIFY-ARG-COUNT = 1 -> 3 (yes)
SB-C::INSERT-DEBUG-CATCH = 1 -> 3 (yes)
SB-C::RECOGNIZE-SELF-CALLS = 1 -> 0 (no)
SB-C::FLOAT-ACCURACY = 1 -> 3 (full)
SB-C:INSERT-STEP-CONDITIONS = 1 -> 3 (full)
SB-C::COMPUTE-DEBUG-FUN = 1 -> 3 (yes)
SB-C::EVAL-STORE-SOURCE-FORM = 1 -> 3 (yes)
SB-C::PRESERVE-SINGLE-USE-DEBUG-VARIABLES = 1 -> 3 (yes)
SB-C::INSERT-ARRAY-BOUNDS-CHECKS = 1 -> 3 (yes)
SB-C::STORE-XREF-DATA = 1 -> 3 (yes)
SB-C:STORE-COVERAGE-DATA = 1 -> 0 (no)
SB-C::INSTRUMENT-CONSING = 1 -> 1 (no)
SB-C::STORE-CLOSURE-DEBUG-POINTER = 1 -> 0 (no)
SB-KERNEL:ALLOW-NON-RETURNING-TAIL-CALL = 1 -> 0 (no)
В частности, политика ограничена какследует:
* (restrict-compiler-policy)
((SAFETY . 3) (DEBUG . 3))
Это минимальный объем отладки и требуемой безопасности, который, таким образом, составляет не менее 3 для обоих.Когда я снимаю ограничение отладки со следующей строкой:
* (restrict-compiler-policy 'debug)
((SAFETY . 3))
... тогда компиляция системы lapack
работает без изменения размера динамического пространства.Добавление отладочной информации - это хорошо при разработке, и я призываю всех сохранять их постоянно, потому что вы никогда не знаете, когда вам нужно что-то отлаживать, но в этом случае просто лучше их отключить.