2016-09-25 9 views
4

Составители могут скомпилировать огромное количество исходного кода. Этот гигантский код переводится в АСТ на этапе компиляции. Я предполагаю, что если код будет огромен, этот АСТ также станет огромным.Как компиляторы управляют своим размером памяти?

Можно ли предположить, что компилятор никогда не исчерпает память на современном компьютере, построив AST и сохранив его в памяти?

+2

Большинство исходных файлов небольшие. – melpomene

+0

Линкерам не нужно много памяти. Составители делают, но их можно разделить на проходы. – EJP

+0

@melpomene Вы были бы удивлены. Раньше у меня был компилятор (Watcom), который печатал количество скомпилированных строк, и обычно это было несколько сотен для файла .c или .cpp и много тысяч для файлов .h/.hpp. – EJP

ответ

1

С виртуальной памятью инструменты компилятора/компоновщика действительно не должны сильно беспокоиться об объеме памяти.

Инструмент запрашивает то, что ему нужно, и ОС либо обеспечивает достаточно в адресном пространстве процесса, либо в качестве виртуальной памяти, либо [решение политики для конкретной машины] ОС отказывается от запроса инструмента, чтобы увеличить пространство в какой-то момент, а процесс получает ошибку и обычно завершает работу.

Конечно, у вас может быть система с огромным лимитом VM и недостаточно физической памяти для ее поддержки. Затем инструмент будет разбиваться на страницы до тех пор, пока он не удастся, или оператор не остановит его с отвращением.

[У нас есть собственный компилятор, который мы часто используем для составления нескольких миллионов монолитных программ. Этот компилятор обычно хочет несколько сотен мегабайт виртуальной машины для обработки этой программы. Это легко обеспечивается большинством современных ПК.]

0

Верно, что требования к памяти компиляторов обычно растут с размером ввода.

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

Звучит слишком просто? Ну, ты не можешь бороться с математикой. Если на самом деле нужна эта память, ее хватит или вам не повезло. Это так просто.

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

  • Нет связанных вопросов^_^