Есть ли более чистый способ обработки ошибок компилятора C1076 и C3859?

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

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

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

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

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

Больше информации:

  • Визуальная студия 2013
  • c++

person Vaillancourt    schedule 28.04.2015    source источник
comment
Все, что я могу добавить, это сказать, что мы сделали то же самое (только один раз). Поскольку компилятор представляет собой 32-битный процесс, в какой-то момент вы больше не сможете это сделать, но пока он работает, я не вижу особых проблем.   -  person Martin Ba    schedule 28.04.2015


Ответы (2)


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

Переключатель только информирует компилятор о затратах памяти, которые он должен планировать во время компиляции. В VS 2013 размер предварительно скомпилированного буфера заголовка по умолчанию составляет 75 МБ, что это ценность, которую сложный проект может разумно превысить. В таких ситуациях вы можете использовать /Zm для увеличения лимита. В качестве альтернативы вы можете приложить значительные усилия для уменьшения сложности включаемых файлов. .

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

person denis bider    schedule 17.05.2015

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

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

person Gnat    schedule 16.01.2018