2

私は非常に大きなCコードを生成するC#プログラムに取り組んでいます。.cファイルとそれに付随するヘッダーファイルを生成します。非常に基本的なレベルでは、プログラムはユーザーからの文字列を受け取り、それをautogen中にヘッダーファイルに配置された他の何千もの文字列と比較します。

ヘッダーファイルには800k行を超えるコードが含まれ、.cファイルには約300k行が含まれています。ご想像のとおり、これらは非常に大きなファイルです。今、私はそのような大きなファイルを持つことは悪いコーディング慣行であることに気づきました。このファイルをより小さなファイルに分割してそのようにコンパイルするのが最善ですが、この2つのファイル構造は、私のプロジェクトが物事の壮大なスキームでどのように使用されるかのために必要であると想定できます。

そのことを念頭に置いて、VisualStudioIDEとコマンドラインでこのプログラムをコンパイルするのに問題があります。実際、それは完全に真実ではありません。どちらの方法でも試してみるたびに正常にコンパイルされているようです(確かに時間がかかります)。しかし、プログラムを実行するようになると、問題が発生します。入力ループに問題なく到達しますが、ユーザー入力を受け入れた後、プログラムは次のエラーでクラッシュします。

Prototype.exeの0x008105f9で未処理の例外:0xC0000005:アクセス違反の書き込み場所0x00000000。

私はこれが問題を引き起こしている私のコードではないとかなり確信しています。デバッグモードで生成されたこのコードのバージョンを実行しましたが、これははるかに小さく、正常に実行されます。唯一の違いは、C#プログラムによってヘッダーファイルに書き込まれた文字列の量です。小さいファイルのサイズは、それぞれ14k行と5k行です。また、IDEでは、フルサイズのコードでコンパイルして実行した後にブレークポイントを使用してデバッグすることはできませんが、小さいコードではできます。

私の質問はこれです:C言語またはVisual Studioコンパイラが上記のエラーを引き起こす単一の大きなファイルで持っている制限または問題はありますか?もしそうなら、私の2ファイル構造を維持しながらこの制限を回避する方法はありますか?プロパティダイアログでヒープとスタックのサイズを4MBに増やしてみましたが、これは役に立ちません。

これはコードを生成して実行するための異常な方法であることに気づきましたが、アドバイスをいただければ幸いです。

4

1 に答える 1

3

このような大きなファイルを持つことは悪いコーディング慣行であることに気づきました

いいえそうではありません。

そのようにMANUALLMAINTAINEDであるLOGICを含むファイルを持つことは悪い習慣です。

定数の巨大なファイルを持つことは議論の余地があります、

しかし、そのように生成されたファイルがあると、コーディングしないため、コーディング方法には表示されません。あなたはそれを生成します。

生成のしやすさなど、生成されたコードのファイルが少ないことには良い点があります。VS.ENTはそれ自体を実行します。EntityFrameworkなどは、すべて1つの入力モデルから大量のクラスを含む1つのcsファイルを生成します。

上記のエラーの原因となる単一のargeファイルに関するC言語またはVisualStudioコンパイラの制限または問題はありますか?

文書化されたものはありません。おそらく、ほとんどの人が目にすることのないバグに遭遇するでしょう。私はあなたが書き直しをしているのではないかと心配しています-PSSサポートケース(Microsoftサポートサービス)。コンパイラのバグを見つけた場合は無料である可能性があります。

あるいは、それはあなたのコードかもしれません-あなたのデバッグケースがはるかに小さい場合、それはあなたのコードが完全なデータセットでエラーを生成するかもしれません、それはコンパイラの問題よりも可能性が高いです。

小さなセットではなく、FULLファイルを使用してデバッグを実行することをお勧めします。デバッガーが意外な場所を指し示す場合があります。

于 2012-07-06T10:42:18.987 に答える