仕事でVC++で開発されたソフトに機能追加をしています。
環境はVisualC++6.0(SP3)&Win2Kです。
何年か前に開発されて他の人がやってたものを今回引き継ぎました。
SDKで開発しているソフトなのですが、グローバル変数が
かなり多いです。おそらくそれが原因と思われますが、
今回の機能追加の途中でビルド時にエラーが出るように
なりました。
(致命的なエラー C1076
コンパイラの制限 : 内部ヒープ領域の上限に達しました。領域を広げるには、/Zm オプションを使ってください。)
調べてみたところ、/Zm コンパイラオプションで
コンパイラのメモリ アロケーションの領域を設定するとよいみたいでした。
ひとまず/Zmが150になっていたものを160に設定してビルドは通るようになりましたが、気がかりな点があります。
コンパイラオプションを変えることによって、何か弊害が
でることはあるのでしょうか。
今回のコンパイラオプションを変えたことが原因で不具合があってはと思いまして・・・
VC++初心者なのですごく初歩的な質問をしているかもしれません。どなたか教えてください。
No.1
- 回答日時:
コンパイルが通れば、たぶん大丈夫かと思いますが、
大きな配列とかを新たに作成したりしていませんか?
いくら沢山グローバル変数が有ったとしても、ヒープ領域の上限に達するとはかなりな量です。大きな配列とかのメモリは、動的に確保した(newとかmallocした)方がよいと思います。
この回答への補足
ありがとうございます。
配列は使っていませんが、グローバル変数が2000個くらい
定義されています。
やはりグローバル変数が多すぎるのでしょうか。
お礼が遅くなりましたが、回答ありがとうございました。
長年使われてきたソフトでこの先10年以内?には
今私が保守しているものに代わるソフトを考えたいと
いった理由で最小限の修正でつないでほしいみたいです。
結局、/Zmを200にして当分はしのぐことになりました。
VC++はまだ初心者なのでこの先も質問することがあるかも
しれませんが、そのときはよろしくお願いしますm(__)m
私もここで回答を書けるようにならなくては・・・
No.2ベストアンサー
- 回答日時:
弊害は無いと思います。
歴史のある(言い換えれば設計が古い)コンパイラは、コンパイル速度優先のためか、シンボル等の増加を動的に解決しないものが多く、必要であればオプションで設定することになります。
Zmの値は、最大2,000まで指定できたはずです。VC++6.0では、100あたり100MB程度だったとの記憶があるので、メモリに余裕があれば、200や300くらいは気にはならないでしょう。
ありがとうございます。
ビルドは通ったのですが、結局動きませんでした。
(そのDLLを起動しようとした時点で「アドレス~で???の読み込み違反が・・・」という感じのメッセージが出てしまいました。)
Zmの値を変えたことが原因でないと思いたいですが、もう少しソースをみたりとかしてみます。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Excel(エクセル) マクロの付いたExcelが開けません 3 2023/02/01 10:54
- その他(プログラミング・Web制作) このプログラミングをどう組みますか? Googlecolabでやってるんですが、出来る方お願いします 1 2022/07/13 10:52
- その他(IT・Webサービス) ホームページにカウント数を表示する 2 2022/10/28 10:37
- モニター・ディスプレイ windows10 モニタに表示されなくなった 2 2023/08/04 16:58
- Excel(エクセル) Excel起動時にエラーダイアログが表示される 3 2022/07/28 19:52
- Android(アンドロイド) Xperia10IVが毎日朝9時くらいに再起動する原因はなんででしょうか? 朝6時30分に仕事に行く 1 2023/01/21 17:06
- IT・エンジニアリング IT開発、ソフトウェア開発、アプリ開発において、要件定義は受注の前か、後か? 見積額に含むか否か? 1 2022/06/20 19:02
- アプリ Android 1 2022/08/02 07:14
- Visual Basic(VBA) VSコードでバックスペースキーが効かない(パイソン) 1 2022/11/09 04:00
- その他(プログラミング・Web制作) Pythonを用いたフラッシュ暗算ソフトの開発に必要なもの 2 2023/01/29 02:22
このQ&Aを見た人はこんなQ&Aも見ています
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
unsigned long long 型のフォー...
-
C言語の規格
-
cc と gcc の違い
-
gcc のコンパイラオプションに...
-
組み込みソフト。ROM領域にデータ
-
アセンブリ言語から何がわかる...
-
パーサとコンパイラの違いって?
-
家庭用家電などのマイコンのOS...
-
VC++の/Zm オプションについて
-
組み込みソフトってなんですか?
-
VBでVC++の処理速さを実...
-
ALGOL・PL/Iのフリーのコンパイ...
-
C++でデスクトップGUIアプリ開...
-
二つの整数を昇順に並べ換える...
-
【COBOL】小さい字を大きい字へ...
-
VB6のコンパイラ
-
2つのマシンでコンパイルしたld...
-
C言語インタプリタ
-
C言語のプログラミングのソフト...
-
C言語のフリーソフト。
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
unsigned long long 型のフォー...
-
ソフトの開発言語を調べる方法
-
C++でデスクトップGUIアプリ開...
-
組み込みソフト。ROM領域にデータ
-
cc と gcc の違い
-
C++Builder → Visual C++ 移植...
-
printfなど、標準関数のソース...
-
COBOLのALPHABET...
-
COBOLの論理演算子について質問...
-
Visual Studio でmakefileを使...
-
cobolで実行環境って何ですか?
-
パーサとコンパイラの違いって?
-
昔のgraph.hというファイル
-
未使用引数の注意文出力を回避...
-
C言語でのコンパイラの作成方法
-
C言語はC言語でできている?
-
COBOL計算式の中間ワーク桁数に...
-
リリースモードとデバッグモー...
-
『Bin』ディレクトリは何の略語?
-
POWERCOBOLのSQL...
おすすめ情報