2015-04-28 218 views
6

今天我一直在爲我們的precomp.h文件添加一些庫標題。然後我嘗試在調試時重新編譯,並得到這兩個錯誤(從包括boost在內產生):是否有更清晰的方式來處理編譯器錯誤C1076和C3859?

錯誤C3859:超出PCH的虛擬內存範圍;請使用命令行選項「-Zm310」重新編譯或更高版本

致命錯誤C1076:編譯器限制:達到內部堆棧限制;使用/ Zm來指定更高的限制

所以我通過增加內存堆大小來修復它們。那裏沒問題。

我的問題是關於如果這個問題隱藏另一個更多?如果我繼續將庫頭添加到precomp.h,我最終是否必須給它更多內存?這是程序員處理它的方式,還是會有一種「更乾淨」的方式來做到這一點?

更多信息:

  • 的Visual Studio 2013
  • C++
+1

我只能說我們做了同樣的事情(只需要做一次)。由於編譯器是一個32位的進程,有一次你不再能夠做到這一點,但只要它有效,我看不出什麼問題。 –

回答

1

的M/Z參數並不會改變對代碼是如何解釋的東西,所以它不會躲在一個問題代碼,而不是代碼需要大量內存來編譯的事實。

該開關只會通知編譯器在編譯期間應計劃的內存開銷。在VS 2013中,默認的預編譯頭緩衝區大小爲75 MB,這是複雜項目可合理超出的值。在這種情況下,您可以使用/ Zm來增加限制。或者,您可以將大量工作投入reducing the complexity of your include files

在大多數情況下,使用開發人員增加/ Zm的時間會更好。

0

嘗試在Visual Studio中使用64位平臺工具集。這樣做解決了我們的問題,並且它是關於如何解決C1076錯誤的Microsoft's recommendations之一。它也在precompiled header compilation issues的博客文章中提到過。

改變平臺工具集,打開項目的.vcxproj並添加<PreferredToolArchitecture>x64</PreferredToolArchitecture>到每個配置屬性組按照https://stackoverflow.com/a/46069460/478380(這是2017年VS但適用於2013年)。

相關問題