• ベストアンサー

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

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

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

  • ベストアンサー
noname#30727
noname#30727
回答No.2

弊害は無いと思います。 歴史のある(言い換えれば設計が古い)コンパイラは、コンパイル速度優先のためか、シンボル等の増加を動的に解決しないものが多く、必要であればオプションで設定することになります。 Zmの値は、最大2,000まで指定できたはずです。VC++6.0では、100あたり100MB程度だったとの記憶があるので、メモリに余裕があれば、200や300くらいは気にはならないでしょう。

noname#32133
質問者

お礼

ありがとうございます。 ビルドは通ったのですが、結局動きませんでした。 (そのDLLを起動しようとした時点で「アドレス~で???の読み込み違反が・・・」という感じのメッセージが出てしまいました。) Zmの値を変えたことが原因でないと思いたいですが、もう少しソースをみたりとかしてみます。

その他の回答 (1)

  • isobeman
  • ベストアンサー率41% (17/41)
回答No.1

コンパイルが通れば、たぶん大丈夫かと思いますが、 大きな配列とかを新たに作成したりしていませんか? いくら沢山グローバル変数が有ったとしても、ヒープ領域の上限に達するとはかなりな量です。大きな配列とかのメモリは、動的に確保した(newとかmallocした)方がよいと思います。

noname#32133
質問者

お礼

お礼が遅くなりましたが、回答ありがとうございました。 長年使われてきたソフトでこの先10年以内?には 今私が保守しているものに代わるソフトを考えたいと いった理由で最小限の修正でつないでほしいみたいです。 結局、/Zmを200にして当分はしのぐことになりました。 VC++はまだ初心者なのでこの先も質問することがあるかも しれませんが、そのときはよろしくお願いしますm(__)m 私もここで回答を書けるようにならなくては・・・

noname#32133
質問者

補足

ありがとうございます。 配列は使っていませんが、グローバル変数が2000個くらい 定義されています。 やはりグローバル変数が多すぎるのでしょうか。

関連するQ&A

専門家に質問してみよう