2015-04-28 2 views
6

Сегодня я добавляю некоторые заголовки библиотек в наш файл precomp.h. Затем я попытался перекомпилировать в отладке и получил эти две ошибки (порожденные от включения boost):Есть ли более чистый способ обработки ошибок компилятора C1076 и C3859?

ошибка C3859: диапазон виртуальной памяти для PCH превышен; пожалуйста, перекомпилируйте с опцией командной строки «-Zm310» или выше

фатальная ошибка C1076: предел компилятора: достигнут внутренний предел кучи; используйте/Zm, чтобы указать более высокий предел

Поэтому я исправил их, увеличив размер кучи памяти. Нет проблем.

Мой вопрос больше о том, если эта проблема скрывает другую? Должен ли я в конечном итоге предоставить ему больше памяти, если я продолжу добавлять заголовки библиотек в precomp.h? Это способ, которым программисты справляются с этим, или был бы «более чистый» способ сделать это?

Подробнее:

  • Visual Studio 2013
  • C++
+1

Все, что я могу добавить, это сказать, что мы сделали то же самое (нужно было сделать это только один раз). Поскольку компилятор представляет собой 32-битный процесс, в какой-то момент вы больше не сможете это сделать, но пока это работает, я вижу небольшую проблему. –

ответ

1
параметр

Параметр/Zm ничего не знает о том, как интерпретировать код не меняется, так что не скрывает проблему в кода, кроме того, что для компиляции требуется много памяти.

Коммутатор сообщает только компилятору о расходах на память, которые он должен планировать во время компиляции. В VS 2013 по умолчанию предварительно скомпилированный размер буфера заголовка равен 75 MB, что является значением, которое сложный проект может разумно превышать. В таких ситуациях вы можете использовать/Zm для увеличения лимита. В качестве альтернативы вы могли бы вложить значительную работу в reducing the complexity of your include files.

В большинстве случаев, это намного лучше использовать время разработчиков для увеличения/Zm.

0

Попробуйте использовать набор инструментов 64-разрядной платформы в Visual Studio. Это разрешило проблему для нас, и это один из Microsoft's recommendations для того, как обращаться к ошибке C1076. Это также упоминается в блоге на precompiled header compilation issues.

Чтобы изменить набор инструментов платформы, откройте проект .vcxproj и добавьте <PreferredToolArchitecture>x64</PreferredToolArchitecture> к каждой группе свойств конфигурации согласно https://stackoverflow.com/a/46069460/478380 (что для VS 2017, но относится к 2013 году).