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で質問しましょう!
このQ&Aを見た人はこんなQ&Aも見ています
-
歩いた自慢大会
「めちゃくちゃ歩いたエピソード」を教えてください。 長時間でも長距離でも結構です。
-
フォロワー20万人のアカウントであなたのあるあるを披露してみませんか?
あなたが普段思っている「これまだ誰も言ってなかったけど共感されるだろうな」というあるあるを教えてください
-
映画のエンドロール観る派?観ない派?
映画が終わった後、すぐに席を立って帰る方もちらほら見かけます。皆さんはエンドロールの最後まで観ていきますか?
-
海外旅行から帰ってきたら、まず何を食べる?
帰国して1番食べたくなるもの、食べたくなるだろうなと思うもの、皆さんはありますか?
-
天使と悪魔選手権
悪魔がこんなささやきをしていたら、天使のあなたはなんと言って止めますか?
-
Visual C++でdebugとreleaseで計算結果が異なる
C言語・C++・C#
-
デバッグ時はOK、デバッグ無しで開始するとERROR
C言語・C++・C#
-
「タイプ初期化子が例外をスローしました」エラー何?
Visual Basic(VBA)
-
-
4
Winmerge ファイルの中身は同じなのに黄色くなる
その他(OS)
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・人生のプチ美学を教えてください!!
- ・10秒目をつむったら…
- ・あなたの習慣について教えてください!!
- ・牛、豚、鶏、どれか一つ食べられなくなるとしたら?
- ・【大喜利】【投稿~9/18】 おとぎ話『桃太郎』の知られざるエピソード
- ・街中で見かけて「グッときた人」の思い出
- ・「一気に最後まで読んだ」本、教えて下さい!
- ・幼稚園時代「何組」でしたか?
- ・激凹みから立ち直る方法
- ・1つだけ過去を変えられるとしたら?
- ・【あるあるbot連動企画】あるあるbotに投稿したけど採用されなかったあるある募集
- ・【あるあるbot連動企画】フォロワー20万人のアカウントであなたのあるあるを披露してみませんか?
- ・映画のエンドロール観る派?観ない派?
- ・海外旅行から帰ってきたら、まず何を食べる?
- ・誕生日にもらった意外なもの
- ・天使と悪魔選手権
- ・ちょっと先の未来クイズ第2問
- ・【大喜利】【投稿~9/7】 ロボットの住む世界で流行ってる罰ゲームとは?
- ・推しミネラルウォーターはありますか?
- ・都道府県穴埋めゲーム
- ・この人頭いいなと思ったエピソード
- ・準・究極の選択
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
unsigned long long 型のフォー...
-
ソフトの開発言語を調べる方法
-
変数の内容がコロコロ変わる、...
-
C言語のプログラミングのソフト...
-
C言語はC言語でできている?
-
C言語の関数の中身のソースコー...
-
パーサとコンパイラの違いって?
-
main() 関数は、int を返値とす...
-
Σの計算について
-
volatile修飾子について
-
24bit サイズの変数
-
C++Builder → Visual C++ 移植...
-
python エラー
-
<unistd.h>をVisualStudioでつ...
-
VBAを何回も作り直して、容量が...
-
アプリケーションのDLLファイル...
-
エクセルのエラーメッセージ「4...
-
” OS ビルド ” の意味が分か...
-
実行後にコンパイルに失敗しま...
-
<math.h>があるのにsqrtが・...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
unsigned long long 型のフォー...
-
ソフトの開発言語を調べる方法
-
C++Builder → Visual C++ 移植...
-
COBOLのALPHABET...
-
printfなど、標準関数のソース...
-
パーサとコンパイラの違いって?
-
cc と gcc の違い
-
組み込みソフト。ROM領域にデータ
-
リリースモードとデバッグモー...
-
変数の内容がコロコロ変わる、...
-
PICでのI2C通信でのマスタ、ス...
-
C++でデスクトップGUIアプリ開...
-
組込みC開発
-
プログラマーに向いている人の...
-
最初に使う変数のゼロクリアに...
-
未使用引数の注意文出力を回避...
-
main() 関数は、int を返値とす...
-
COBOLの論理演算子について質問...
-
cudaのnvccはmingwやgccでも使...
-
オープン系とか、組込み系とか...
おすすめ情報