我正在开发一个生成大量 C 代码的 C# 程序。它生成一个 .c 文件和随附的头文件。在一个非常基本的层面上,程序从用户那里接受一个字符串,然后将它与在 autogen 期间放置在头文件中的数千个其他字符串进行比较。
头文件包含超过 800k 行代码,.c 文件包含大约 300k。可以想象,这些都是非常大的文件。现在,我意识到拥有这么大的文件是不好的编码习惯。最好的办法是将这个文件分解成更小的文件并以这种方式编译它,但是我们可以假设这两个文件结构对于我的项目将如何在总体方案中使用是必要的。
考虑到这一点,我在 Visual Studio IDE 和命令行中编译该程序时遇到了问题。事实上,这并不完全正确。每次我用任何一种方法尝试它时,它似乎都可以编译(诚然,这需要一段时间)。但是,当我开始运行程序时,问题就出现了。它很好地到达了输入循环,但是在接受用户输入后,程序崩溃并出现以下错误:
“Prototype.exe 中 0x008105f9 处未处理的异常:0xC0000005:访问冲突写入位置 0x00000000。”
我相当确定这不是我的代码导致问题。我已经运行了在调试模式下生成的代码的一个版本,它要小得多并且运行良好。唯一的区别是由 C# 程序写入头文件的字符串的数量。较小文件的大小分别为 14k 和 5k 行。此外,IDE 不允许我在使用完整大小的代码编译和运行后使用断点进行调试,而我的较小代码可以。
我的问题是:C 语言或 Visual Studio 编译器对单个大文件是否有任何限制或问题会导致上述错误?如果是这样,有没有办法在保留我的两文件结构的同时规避这个限制?我尝试在属性对话框中将堆和堆栈大小增加到 4mb,但这没有帮助。
我意识到这是一种生成和运行代码的异常方式,但我会很感激任何建议。