
仕事でVC++で開発されたソフトに機能追加をしています。
環境はVisualC++6.0(SP3)&Win2Kです。
何年か前に開発されて他の人がやってたものを今回引き継ぎました。
SDKで開発しているソフトなのですが、グローバル変数が
かなり多いです。おそらくそれが原因と思われますが、
今回の機能追加の途中でビルド時にエラーが出るように
なりました。
(致命的なエラー C1076
コンパイラの制限 : 内部ヒープ領域の上限に達しました。領域を広げるには、/Zm オプションを使ってください。)
調べてみたところ、/Zm コンパイラオプションで
コンパイラのメモリ アロケーションの領域を設定するとよいみたいでした。
ひとまず/Zmが150になっていたものを160に設定してビルドは通るようになりましたが、気がかりな点があります。
コンパイラオプションを変えることによって、何か弊害が
でることはあるのでしょうか。
今回のコンパイラオプションを変えたことが原因で不具合があってはと思いまして・・・
VC++初心者なのですごく初歩的な質問をしているかもしれません。どなたか教えてください。
No.2ベストアンサー
- 回答日時:
弊害は無いと思います。
歴史のある(言い換えれば設計が古い)コンパイラは、コンパイル速度優先のためか、シンボル等の増加を動的に解決しないものが多く、必要であればオプションで設定することになります。
Zmの値は、最大2,000まで指定できたはずです。VC++6.0では、100あたり100MB程度だったとの記憶があるので、メモリに余裕があれば、200や300くらいは気にはならないでしょう。
ありがとうございます。
ビルドは通ったのですが、結局動きませんでした。
(そのDLLを起動しようとした時点で「アドレス~で???の読み込み違反が・・・」という感じのメッセージが出てしまいました。)
Zmの値を変えたことが原因でないと思いたいですが、もう少しソースをみたりとかしてみます。
No.1
- 回答日時:
コンパイルが通れば、たぶん大丈夫かと思いますが、
大きな配列とかを新たに作成したりしていませんか?
いくら沢山グローバル変数が有ったとしても、ヒープ領域の上限に達するとはかなりな量です。大きな配列とかのメモリは、動的に確保した(newとかmallocした)方がよいと思います。
この回答への補足
ありがとうございます。
配列は使っていませんが、グローバル変数が2000個くらい
定義されています。
やはりグローバル変数が多すぎるのでしょうか。
お礼が遅くなりましたが、回答ありがとうございました。
長年使われてきたソフトでこの先10年以内?には
今私が保守しているものに代わるソフトを考えたいと
いった理由で最小限の修正でつないでほしいみたいです。
結局、/Zmを200にして当分はしのぐことになりました。
VC++はまだ初心者なのでこの先も質問することがあるかも
しれませんが、そのときはよろしくお願いしますm(__)m
私もここで回答を書けるようにならなくては・・・
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
このQ&Aを見た人はこんなQ&Aも見ています
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
C++Builder → Visual C++ 移植...
-
組み込みソフト。ROM領域にデータ
-
エディタとコンパイラ 基礎
-
DLLの呼び出され方が分かりません
-
C言語の本!
-
COBOLの論理演算子について質問...
-
turbo-Cとturbo-C++
-
#pragma プリプロセス について
-
組込みC開発
-
COBOLのALPHABET...
-
DLLファイルの逆コンパイラにつ...
-
unsigned long long 型のフォー...
-
python エラー
-
<unistd.h>をVisualStudioでつ...
-
” OS ビルド ” の意味が分か...
-
ビルドとリビルドの違いを教え...
-
res://ieframe.dll/について
-
visual studio2019でデバッグが...
-
適切な変換関数が存在しない???
-
外部依存関係について
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
DLLファイルの逆コンパイラにつ...
-
unsigned long long 型のフォー...
-
ソフトの開発言語を調べる方法
-
組み込みソフト。ROM領域にデータ
-
C++でデスクトップGUIアプリ開...
-
パーサとコンパイラの違いって?
-
【C言語】 型のサイズについて
-
COBOLのALPHABET...
-
<conio.h>?
-
printfなど、標準関数のソース...
-
COBOLの論理演算子について質問...
-
cc と gcc の違い
-
DLLの呼び出され方が分かりません
-
AIXとCOBOLについて
-
PICマイコンのプログラムカウン...
-
リリースモードとデバッグモー...
-
C++Builder → Visual C++ 移植...
-
C++DLLの明示的リンクに関して
-
cobolで実行環境って何ですか?
-
C言語の規格
おすすめ情報