A 回答 (3件)
- 最新から表示
- 回答順に表示
No.3
- 回答日時:
gcc(GNU C compiler)についてです。
私も気になったので簡単なプログラム(vector型に1~10000を順にpush
してclearする、というのを10000回繰り返す)をつくって試してみました。
これを、「1.コンパイルオプション無し」「2.デバッグオプション有り」
「3.最適化オプション有り」「4.最適化オプション有り+デバッグ
オプション有り」の4条件について、各20回ずつ実行し、得られた各20個の
実行時間データをt検定に掛けました。
まず、デバッグオプションについてですが、1、2、の間で実行時間に
有意な差は認められず、3、4、の間でも優位な差は認められませんでした。
この結果からは、gccにおいてはデバッグオプションを付けたからといって
実行時間が長くなるとは言えない、と言えます。
gccではデバッグオプションを付けた際に、余分なライブラリを
リンクするのではなく、ソース内で指定された変数名などのシンボルを
オブジェクトファイルに埋め込むだけであるため、実行時間に
有意な差は生じないのだと思います。(シンボルの分だけ実行ファイルの
サイズは飛躍的に大きくなるので、少しは遅くなるのでしょうが、
上記のような小規模のプログラムでさえ、その影響は無視できるものの
ようです)
しかし、上記の条件4.はgcc固有の、かなり特殊なもののようです。
すなわち、他のコンパイラではデバッグフラッグと最適化フラッグは
同時には指定できない、というのが一般的なようです。
その理由はalfeimさんのサンプルプログラムで明らかなように、
最適化をすると、ソースコード上での実行の流れと実際の実行の流れが
変わってしまう為です。
したがって、a-kumaさんが仰るような、デバッグオプションを付けると
最適化ができないので遅くなるというのは、gccにおいては成り立たないよう
に思いますが、かなり一般的な現象なのではないかと思います。
もう一点、最適化オプションをつけると速くなるというのは自明ですね。
上記の1は3の、2は4のそれぞれ6倍の実行時間が掛かりました。
その理由としては、マシンの特性や、コンパイルの対象となる高級言語の
コマンドが実行される文脈、などに依存した最適化が行なわれるためである、
ということになるんでしょうか。どのような最適化が行なわれるかは、
コンパイラやマシンに依るようです。
alfeimさんの例ですとか、実行回数がコンパイル時に分るような
ループを展開するとか、変数をできるだけレジスタに割り当てるとか、
関数の再帰呼出しの最後の数回を展開するとか、
gccのマニュアルを見ただけでも色々あるみたいですね。
No.2
- 回答日時:
デバッグフラグ:
VisualC++では「標準では」最適化無効ですが、設定を変えれば最適化オプションをつけてデバッグ情報を付加できます。(でないとRelease版でのみ出るようなバグに対処できなくなりますから)
デバッグフラグをつけてコンパイルした場合、対応ソースコードの対応行の指定や変数情報が付加され、VisualC++では確保した変数の自動初期化(コンパイルオプションによってはデバッグフラグを切っていても自動初期化する事は出来ますが・・・)やメモリ確保/開放関数の差し替え等があります。
デバッグのサポートをする命令が通常コンパイル時の命令群に付与されますので、実行速度は遅くなります。
最適化:
たとえば以下のようなソースコード
for(int i = 0; i < 10; i++)
{
int a;
/* 適当な処理 */
}
のようなものがあった場合、ブロック内のint a;の宣言はデータ操作の副作用が無いので、ループ外で宣言しても実質変わりがありません。しかしマシン語レベルで比較すると、ループ内で変数確保をした場合、多くのCコンパイラではスタック操作の命令が実行されますので、最終的な結果を見る場合、ループ外で変数宣言をした方が、実行効率は良くなります。このような実行上、不都合はないが速度向上の邪魔になるものや、コードサイズの面で無駄なコードをシェイプしてくれるのが最適化です。
最適化にもいろいろあり、上記の例のような速度最適化やコードサイズの最適化等があります。
実際にどうなっているか等はコンパイラについての本やコンパイラのソースコードなどを読まれると良いかと思います。
No.1
- 回答日時:
まず「最適化フラグ」から。
「最適化」は、分かりますか?
ソースで書かれていることを、機械語に翻訳するときに、(何かが)最適になる
ようにコンパイラが気を利かせてくれること、です。その「何か」には、実行速度
もありますので、最適化を指定する/しないで、実行速度(実行時間)が変わって
くるのは、当たり前ですね。
次に「デバッグフラグ」について。
デバッグフラグ、というあたりで、Visual C++ っぽいんですが、ふつう、デバッグ
のプロジェクトだと、最適化をしないようになります。つまり、最適化をしないから
遅くなる。
また、デバッグを指定したときには、デバッグ用のライブラリがリンクされるので
すが、こいつらは、デバッグのために有効な情報を内部で抱えたりなど、普通の
ライブラリに比べて、やってくれることが少し増えてます。
その処理が少し増えたことによって、処理速度が遅くなる、ということです。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- 高校受験 数学の問題いくつか捨てても大丈夫?残り1ヶ月、点数が取れない教科ばっか勉強しても大丈夫? 高校受験 2 2023/01/07 17:55
- 化学 化学基礎の問題 解説がないのでどこが間違えているのかを教えてください。 正答は0.200molです。 1 2023/01/23 15:31
- 小学校 本当にびっくりしました。 小学校の宿題は、授業中に解説や間違い直しをしないそうです。 週末の宿題がや 6 2022/07/15 19:46
- Microsoft ASP Windows10エンタープライズ版をインストールしたらアプリが使えなくなった 3 2023/03/07 11:08
- C言語・C++・C# Cのコンパイルでコメントアウトをそのままオブジェクトに保持したい 7 2023/08/01 22:22
- 中途・キャリア 中途採用の面接にて1時間の枠が30分で終わりました。不合格フラグかと思ったのですが、逆質問で配属後の 3 2023/05/12 18:40
- 中学校受験 小学5年生の娘の中学進学のことで相談です。 公立と私立で悩んでる状況で、私、父親としては、学習環境が 4 2022/06/25 08:50
- 派遣社員・契約社員 美容部員 顔合わせ 派遣 フラグ 2 2022/09/16 11:04
- 高校 高校受験に向けて 私は今中学2年生です。 偏差値70以上の高校に行きたいと思っています。 ですが今の 5 2023/05/16 21:51
- 求人情報・採用情報 昨日、第一志望の面接(一般事務)に行きました。中途採用で転職をしようと思い、応募しました。 ネットで 4 2022/06/12 11:42
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
DLL参照時に指定されたモジュー...
-
VB6.0を使用しています
-
Visual Studio 2008 SP1について
-
visual studio 2008 のデバッグ...
-
デバッグとビルドは何が違うの...
-
Eclipseのブレークポイントが○...
-
デバッガでステップ実行してい...
-
C# リソースに埋め込んだ.exeフ...
-
RichTextBox使用で...
-
eclipseでプログラムが実行でき...
-
ブレークポイントは現在の設定...
-
Visual studio2017で、2回目の...
-
VC++ 2010でアプリケーションが...
-
C言語での開発でエラーが出て困...
-
VC++でSQL Serverに接続するに...
-
Eclipseのデバッグ時にブレーク...
-
Release版のexeが動きません
-
VC#での参照の追加が上手くいき...
-
visual studio2019でデバッグが...
-
ソリューションをまたがるデバ...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
デバッグとビルドは何が違うの...
-
visual studio2019でデバッグが...
-
デバッガでステップ実行してい...
-
VC++でSQL Serverに接続するに...
-
C# リソースに埋め込んだ.exeフ...
-
Eclipseのブレークポイントが○...
-
DLL参照時に指定されたモジュー...
-
C言語での開発でエラーが出て困...
-
Visual studio2017で、2回目の...
-
eclipseでプログラムが実行でき...
-
Visual C#で、usingが出来ない...
-
eclipseでデバックするとエラー...
-
ソリューションをまたがるデバ...
-
visual studio 2008 のデバッグ...
-
ブレークポイントは現在の設定...
-
Eclipseのデバッグ時にブレーク...
-
Visual Studio 2008 SP1について
-
VB6.0を使用しています
-
ASP.NETでデバッグができない
-
Visual Studio 2017 ビルドする...
おすすめ情報