
No.2ベストアンサー
- 回答日時:
とりあえず,Visual C++を前提に話を進めます。
> DebugとReleaseモードで作成された実行ファイルの速度の違いですが、
> 一般的にどれくらいの差があるのでしょうか?(だいたいn%遅いとか)
内容次第です。
極端な例ですが,
int WINAPI WinMain (HINSTANCE hInst, HINSTANCE hPrev, LPSTR lpCmdLine, int nCmdShow)
{ return MessageBoxA(0, "Hello, World!", "", MB_OK); }
について,どれだけの差があるかと言われても,まずないでしょう。
# ついでに,リンカオプションでWinMainを本当のエントリポイントにすると効果的。
差が付く可能性があるのは,自分の書いたコードがCPUを相手に頑張る場合です。
その,非常に局所的な部分だけを見れば,何倍とかもあり得るでしょうが (実行時の計算を省くので∞,なんてこともある),
全体で見ると,数値計算を主とするプログラムを除いて,大した数字にはならないと思います。
# コンパイラの支配下から外れる部分が大半になるでしょうし。
MSDN : タイムクリティカルなコードを最適化するためのヒント
http://msdn.microsoft.com/ja-jp/library/eye126ky …
などにもありますが,結局は「キャッシュミスやページフォールトを減らす」が一番効果的だったりします。
もちろん,最適化オプションによってコードが小さくなったり重複する定数がまとめられたりして局所化が進む分減るでしょうが,
> リリースモードの場合は最適化も行われるということですがデバッグモードは何か付加されるのでしょうか?
MSDN : リリースビルドの作成
http://msdn.microsoft.com/ja-jp/library/cc367889 …
を読んでください。デフォルトの「リリースビルド」構成において,「デバッグビルド」構成に比べて何が行われるのか書いてあります。
なお,ビルド構成は任意に作成できる物なので,デバッグ情報を付加して最適化オプションを有効化することもできます。
No.6
- 回答日時:
使用するコンパイラにも拠りますが、通常、以下のような違いが出ます。
・最適化をするか、最適化をしないか
・最適化をするとしてもソースコードの1行単位の最適化をするか、関数単位の最適化をするか
関数単位での最適化では、場合によっては、複数行に渡っての最適化が行われ「プログラムコードを行単位に分ける事が不可能」になります。
つまり「ソースコードのこの行は、プログラムコードのこのアドレス」と言うのが不明確になるのです。
下手をすると関数の実体そのものが無くなってしまう事もあります。
そうすると「ソースコード単位でのトレース」が出来なくなりますから、デバッグモードでは極端な最適化はしません。最適化をするとしても「ソースコードの1行単位」です。
・デバッグライブラリを使用するか、リリースライブラリを使用するか
デバッグライブラリを使用した場合、通常、ライブラリ内で例外が起きるとトラップされてデバッガやアプリに対して例外が送出され、アプリが落ちたりする事は少ないです。
しかし、リリースライブラリの場合、ライブラリ内での例外はトラップされないので、アプリ側で事前に例外をトラップしておかない場合、例外発生でいきなりアプリが落ちます。
なので「引数が常に正しく、ライブラリで例外が起きる事はない」と判っている場合、例外トラップの前処理が無い分、リリースライブラリの方が高速になる傾向があります。
またライブラリを「実行時ランタイムDLL」に指定しておいた場合、デバッグビルドのままだと「一般に配布されていない、デバッグ用DLLを実行時に要求する」ので、コンパイルしたパソコン以外で動かせない可能性があります(デバッグビルドでも、全ライブラリを実行ファイルに内包するモードでビルドした場合は、他のパソコンでも動かせます)
それ以外では、大きな違いはありません。
なお、最近のコンパイラは、デバッグモードでビルドすると、ソースコードデバッグに必要な情報を実行ファイルとは別に作るので、大昔のように「デバッグ情報が実行ファイルに含まれてて実行ファイルのサイズが肥大」と言う事は起きない傾向にあります。
No.5
- 回答日時:
組込み系の話で、特にルネサスのHEW(コンパイラなどIDE)の場合に
リリースモードとデバッグモードでそれぞれビルドできます。
最近は、デバッグ確認した状況と変えて出荷したくないという
ことから、デバッグモードのまま出荷されることが多くなっているようで
そのことからデバッグモードにおいてもかなりコンパイラの最適化する
設定になっているようです。この場合、当然速度的には変わりありません。
ただしデバッガーサポートのための命令が追加される場合があり、
その場合に若干コードが増える程度です。
大きな違いはデバッグ情報が含まれるためにバイナリサイズが大きくなっている
ことぐらいです。
ただコンパイラなどMPU毎に対応が異なるのですべてそうなっている
わけではありませんが、比較的新しいものはそうなっているようです。
この辺はPCのソフトウエアの常識とかなり違っていうるようですね。
No.4
- 回答日時:
VC++だとして答えます。
デバッグビルドしたものは他人に配布しても動きません。なので他の人に配布するならリリースビルドが基本となります。
>DebugとReleaseモードで作成された実行ファイルの速度の違いですが、
>一般的にどれくらいの差があるのでしょうか?(だいたいn%遅いとか)
私の経験では最大2倍ぐらい差が出たことがあります。
デバックビルドは最適化されませんので、コードの実行効率が悪いです。
>リリースモードの場合は最適化も行われるということですがデバッグモードは何か付加されるのでしょうか?
デバッグのための情報が付加されています。
No.3
- 回答日時:
>一般的にどれくらいの差があるのでしょうか?(だいたいn%遅いとか)
既に回答されているように、そのコードに依存するでしょう。
#ほとんど差がない場合から数倍の差になるくらいまで・・
かなり前、VC.NET(2002)とVC6で円周率(20000桁)計算をして
比較した結果です。
Debug Release
結果:VC6 91秒 33秒
VC.NET 81秒 78秒
No.1
- 回答日時:
プログラムの内容やステップ数にもよりますので概算しか出来ませんが、デバッグモードの方が50%以上遅いのではないでしょうか。
デバッグモードではデバッグ情報が付与されています。
これにより、現在実行中のプログラムがソースコード上ではどこにあたるのか分かるようになります。
例えばプログラムが異常終了したりすると、デバックモードでソース上と比較しながら実行する事で、ソースの何行目で落ちるのか分かります。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Web・クリエイティブ デザイン 6 2023/08/04 09:54
- その他(Microsoft Office) Excelのバージョンを2019 から2021へバージョンアップしました。 2 2023/07/21 15:41
- タブレット ワンドライブ内のWordファイルの編集について 1 2022/07/01 15:59
- Excel(エクセル) EXCELのグラフを画像(JPG形式)で保存、通常実行がうまく行かない。ステップインはうまく行く 3 2022/08/30 12:06
- 物理学 時間を語るなら、(複数の時間の正体)を知る必要が有る。 1 2023/02/16 22:14
- 据え置き型ゲーム機 PS5向けに開発されているゲームって、PCユーザーを意識した物が多すぎませんか? タイトルは伏せます 5 2023/05/15 13:14
- Wi-Fi・無線LAN 新しく購入したMacに Wi-Fiが接続出来なかったので、理由が分かる方教えてください! 我が家は「 5 2023/06/02 22:19
- C言語・C++・C# C#の2つの実行ファイルとアプリアイコンの変更について 1 2023/01/07 16:57
- 運転免許・教習所 停車中はクリープ現象を防がない方が良いのですか? 13 2023/06/27 12:25
- アプリ 某クラウドソーシングサービスの請負契約のキャンセル後に請求された遅延損害金 1 2022/04/08 00:29
このQ&Aを見た人はこんなQ&Aも見ています
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
unsigned long long 型のフォー...
-
リリースモードとデバッグモー...
-
COBOLの論理演算子について質問...
-
ソフトの開発言語を調べる方法
-
C99の導入方法を教えてください。
-
C++でデスクトップGUIアプリ開...
-
VC++の/Zm オプションについて
-
C言語の規格
-
COBOLの論理演算子について
-
パーサとコンパイラの違いって?
-
VB6のコンパイラ
-
『Bin』ディレクトリは何の略語?
-
JAVAのコメントアウト
-
printfなど、標準関数のソース...
-
C++Builder → Visual C++ 移植...
-
Win32のIME制御について
-
<conio.h>?
-
組み込みソフト。ROM領域にデータ
-
AIXとCOBOLについて
-
中国語(簡体字)をソースコード...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
ソフトの開発言語を調べる方法
-
unsigned long long 型のフォー...
-
printfなど、標準関数のソース...
-
組み込みソフト。ROM領域にデータ
-
リリースモードとデバッグモー...
-
VC++の/Zm オプションについて
-
変数の内容がコロコロ変わる、...
-
COBOLの論理演算子について質問...
-
COBOLのALPHABET...
-
PICでのI2C通信でのマスタ、ス...
-
C++で組んだプログラムの高速化...
-
C++でデスクトップGUIアプリ開...
-
Win32のIME制御について
-
24bit サイズの変数
-
C++Builder → Visual C++ 移植...
-
C言語の規格
-
パーサとコンパイラの違いって?
-
組込みC開発
-
C言語はC言語でできている?
-
AIXとCOBOLについて
おすすめ情報