• ベストアンサー

VC++6.0 の/Zm オプションについて

 ソースが巨大化しすぎて、エラーになるので /Zm800 と指定すると問題解決しました。  しかし、今後、さらなる巨大化が予想されるために /Zm1000 としたところ、fatal error C1060: ヒープの領域を使い果たしました。とエラーが出て困ってします。  パソコンは、メインメモリ 1GB + 仮想メモリ 10GBです。 にもかかわらずエラーが出て困っています。 http://msdn.microsoft.com/ja-jp/library/bdscwf1c(VS.80).aspx  どなたかアドバイスをよろしくお願いいたします。

noname#192260
noname#192260

質問者が選んだベストアンサー

  • ベストアンサー
  • davidfox
  • ベストアンサー率58% (21/36)
回答No.2

>/Zm1000 としたところ、... 手持ちの MSDNによれば デフォルト値が 100 で105MB、よって1000なら1GBを超えます。 普通のデスクトップ向けWindwos では1GBは取れないので、指定値が不正と考えるべきだと思います。 800で問題無いなら(今は)それでいいんじゃないでしょうか。

その他の回答 (1)

  • chie65535
  • ベストアンサー率43% (8520/19368)
回答No.1

>ソースが巨大化しすぎて、エラーになるので 「1関数1ソース」となるように分割コンパイルするしかないでしょう。 もし「すべてが1つのクラスで実装してあって、ソース分割出来ない」としたら「基本的な設計ミス」なので、機能ごとにクラスを階層化するなど「基本的な部分から設計し直す必要がある」でしょう。

noname#192260
質問者

補足

 クラスは、約200以上に階層化していますが  当方、複雑なアプリケーションを組んでいるため、メンテナンス性を考えると、1つのDLLの方が都合が良いのです。

関連するQ&A

  • VC++の/Zm オプションについて

    仕事でVC++で開発されたソフトに機能追加をしています。 環境はVisualC++6.0(SP3)&Win2Kです。 何年か前に開発されて他の人がやってたものを今回引き継ぎました。 SDKで開発しているソフトなのですが、グローバル変数が かなり多いです。おそらくそれが原因と思われますが、 今回の機能追加の途中でビルド時にエラーが出るように なりました。 (致命的なエラー C1076 コンパイラの制限 : 内部ヒープ領域の上限に達しました。領域を広げるには、/Zm オプションを使ってください。) 調べてみたところ、/Zm コンパイラオプションで コンパイラのメモリ アロケーションの領域を設定するとよいみたいでした。 ひとまず/Zmが150になっていたものを160に設定してビルドは通るようになりましたが、気がかりな点があります。 コンパイラオプションを変えることによって、何か弊害が でることはあるのでしょうか。 今回のコンパイラオプションを変えたことが原因で不具合があってはと思いまして・・・ VC++初心者なのですごく初歩的な質問をしているかもしれません。どなたか教えてください。

  • 「VC# 2010 Exp」の参照について

    現在、「http://msdn.microsoft.com/ja-jp/library/ms379606%28v=vs.80%29.aspx」を元にして「理論から実践へ : 外部の型の使用」をしているのですが、「'System.IO.File' に 'ReadAll' の定義がありません。」とエラーが出て、ビルドが出来ません。 何か、この無知な私にヒントでも良いですから、お教え下さると幸いです。 宜しくお願い申し上げます。

  • VS 2010 のコンパイルオプション

    Visual Studio 2010 Pro. でC++のプログラムを書いています。 速度をあげようと、コンパイルオプション /Ox を付加したいと思って    http://msdn.microsoft.com/ja-jp/library/59a3b321.aspx を見ているのですが、    2. [C/C++] フォルダーをクリックします。 の[C/C++] フォルダーとはどこにあるのか見つけることができません。 [プロパティ ページ] ダイアログ ボックスのどこに[C/C++] フォルダーあるのでしょうか? よろしくお願いします。

  • 仮想メモリ増加

    WindowsでJavaWebStartのアプリケーションを起動しています。 10日程起動したままにしておくとタスクマネージャのjavaw.exeの仮想プロセスが増加し続けています。 起動時は200M程度で10日後は1Gを超えています。 メモリリークかと考え調べましたがヒープ領域も非ヒープ領域も増えていません。 メモリの断片化かと考え仮想メモリ増加後にメモリクリーナも試しましたが、メモリは減少しません。 microsoftのvadumpも使い調べましたが、問題あるように見えません。 やはり、プログラムの問題でしょうか?それかjavaのコンパイラの問題でしょうか? どなたかご教授願います。 調査の手段だけでもいいです。

  • MSDNライブラリを VS2010に適用するには

    http://msdn.microsoft.com/ja-jp/library/ms123401.aspx 上記URLのライブラリをVisualStudio2010にインストールする方法が分かりません。 2008や2013向けのインストーラーは見つかるのですが、2010用が見つかりません。 MSDNライブラリをVS2010で使用する方法について、分かる方が居れば、ご教授お願いいたします。

  • アイコンの意味がわからない msdn

    例えば、 http://msdn.microsoft.com/ja-jp/library/microsoft.visualbasic.filesystem_members(v=vs.85).aspx のページなのですが、このアイコンの説明のページがないのですが、 どういう意味か説明しているページはありますか?

  • VC++ windows 64ビットプログラミング

    VC++でのwindows 64ビットプログラミングを勉強しています。 以下のMSDNのページにたどり着き、サンプルプログラムを作りながら確かめているのですが、 http://msdn.microsoft.com/ja-jp/library/3b2e7499.aspx 以下の記述の意味がよく分からないので、教えてください。 ---ここから--- int と long は、64 ビット Windows オペレーティング システムでは 32 ビット値です。 64 ビット プラットフォーム用にコンパイルする必要があるプログラムでは、ポインターを 32 ビット変数に割り当てないように注意してください。 ポインターは、64 ビットのプラットフォームでは 64 ビットなので、ポインターを 32 ビット変数に割り当てると、ポインター値を切り捨てることになります。 ---ここまで--- intとlongのサイズが4バイトでこれは32ビットのときと変わらず、 ポインタのサイズが8バイトに拡張された(これはメモリアドレスが64ビットになったのだから当然)のは理解しているのですが、 http://msdn.microsoft.com/ja-jp/library/94z15h2c.aspx 「ポインターを 32 ビット変数に割り当てる」というのがどういうこと(どういうコード)なのかがわかりません。 こんなことかなとも思ったのですが、これはありえない記述ですよね =============== int a = 0; int *pt = NULL; a = pt; //32ビット変数にポインタを割り当て???(というよりポインタを代入か) error C2440: '=' : 'int *' から 'int' に変換できません。 1> この変換が可能なコンテキストはありません。 =============== 32ビットでは問題にならなくて、64ビットになったから問題になって、どう変えれば問題なくなるのか という感じで説明していただけると分かりやすいのかな思います。 よろしくお願いします。

  • 32bitのメインメモリ上限を実質的に多くするには。

    32bitのメインメモリ上限を実質的に多くするには。 XP32bitでは、メインメモリの認識上限が3GBほどです。 このメインメモリとして作動する容量を実質的に上限以上にしたいです。 たとえば、 極端ですが、メインメモリを3GB食うソフトを、3つ起動したい場合です。 仮想メモリは、メモリが上限未満の時に、設定できる物だと思っているのですが。 メモリ3GB+仮想メモリ9GB=実質(カーネル)メモリ12GB にはならないと思っています。 カーネルメモリの上限を増やせれば、 仮想メモリをメインメモリ未使用領域・USBメモリ・SSDにでもすればいいのではと思ったのですが。 RAMとしてメモリの空き領域(3GB以上の未使用領域)を使用したり、 USBメモリ等のブースト系は、 SSDの代わりか、キャッシュを高速化しているだけなので、除外して下さい。 64bitですが、使用ソフトの仕様上使用できません。

  • parseメソッドのコードを見たいです

    .NETのparseメソッドがどのように実装されているか見たいのですが、ネットで探しても見つかりません。 http://msdn.microsoft.com/ja-jp/library/system.int32.parse(v=vs.110).aspx 上記のようなサイトは見つかるのですが・・・やはり公開していないのでしょうか?よろしくお願いします。

  • VS2010でC#のDLLを作成する手順

    Visual Studio 2010でVisual C#のコードのDLLを作成したいのですが 簡単なコード例で具体的な操作手順を教えていただけないでしょうか。 (Microsoft Visual Studio 2010、OS WindowXP) Visual C++でDLLを作成する手順については 「チュートリアル: ダイナミック リンク ライブラリの作成と使用 (C++)Visual Studio 2010 」 <http://msdn.microsoft.com/ja-jp/library/ms235636(v=vs.100).aspx> に詳しく手順が記載されていましたが、このVisual C#版が見たいのですが見当たりませんでした。 よろしくお願いします。

専門家に質問してみよう