質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
C

C言語は、1972年にAT&Tベル研究所の、デニス・リッチーが主体となって作成したプログラミング言語です。 B言語の後継言語として開発されたことからC言語と命名。そのため、表記法などはB言語やALGOLに近いとされています。 Cの拡張版であるC++言語とともに、現在世界中でもっとも普及されているプログラミング言語です。

Windows

Windowsは、マイクロソフト社が開発したオペレーティングシステムです。当初は、MS-DOSに変わるOSとして開発されました。 GUIを採用し、主にインテル系のCPUを搭載したコンピューターで動作します。Windows系OSのシェアは、90%を超えるといわれています。 パソコン用以外に、POSシステムやスマートフォンなどの携帯端末用、サーバ用のOSもあります。

MinGW

MinGW(ミン・ジー・ダブリュー)は GNUツールチェーンのWindows移植版です。 ランタイムライブラリと開発ツールで構成されています。

Q&A

解決済

3回答

4243閲覧

C(gcc)で開発したCUIアプリケーションのcmd.exe上での初回実行が遅い

退会済みユーザー

退会済みユーザー

総合スコア0

C

C言語は、1972年にAT&Tベル研究所の、デニス・リッチーが主体となって作成したプログラミング言語です。 B言語の後継言語として開発されたことからC言語と命名。そのため、表記法などはB言語やALGOLに近いとされています。 Cの拡張版であるC++言語とともに、現在世界中でもっとも普及されているプログラミング言語です。

Windows

Windowsは、マイクロソフト社が開発したオペレーティングシステムです。当初は、MS-DOSに変わるOSとして開発されました。 GUIを採用し、主にインテル系のCPUを搭載したコンピューターで動作します。Windows系OSのシェアは、90%を超えるといわれています。 パソコン用以外に、POSシステムやスマートフォンなどの携帯端末用、サーバ用のOSもあります。

MinGW

MinGW(ミン・ジー・ダブリュー)は GNUツールチェーンのWindows移植版です。 ランタイムライブラリと開発ツールで構成されています。

0グッド

0クリップ

投稿2019/03/31 19:29

Windows10でC言語とMinGWのgccを使ってCUIアプリケーションを開発しています。コンパイルしたバイナリをcmd.exe上で実行すると、2回目以降の実行はキャッシュでも効いているのか比較的早く実行されるのですが、初回実行時に異様に時間がかかります。体感だと2回目以降が数ms, 初回が1~2秒ぐらいです。しばらくPCを放置して、また実行すると再び初回実行の遅さになり、それから2回目以降は早くなります。

  1. cmd.exe 上で myapp.exe をタイプし実行
  2. 初回、出力までが遅い。2回目以降は速い

初回実行の速度を2回目以降と同レベルの速度にしたいのですが、何か良い方法はないでしょうか。
gcc のバージョンは 8.2.0 です。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

cateye

2019/03/31 22:08 編集

回答に移動^^;
guest

回答3

0

ベストアンサー

体感だと2回目以降が数ms, 初回が1~2秒ぐらい

よく似た経験があります。
セキュリティの検査をするソフトがインストールされているWindows機で、

  • 実行するプログラムが安全かどうか、起動時に検査をするので、初回は時間がかかる
  • 一度検査を済ませたプログラムは、その記録を保持しているので、2回目からは起動が速い

というものでした。
プログラムを修正しコンパイルしなおすと機械語コードが変化するので、検査をやり直します。私たちの作業は、修正しては動作確認する、の繰り返しですから、いちいちブレーキがかかり、ストレスだった事を覚えていますが、具体的なソフト名は覚えていません。
これが原因なら、そのセキュリティソフトを無効にする・アンインストールする、ということになります。

投稿2019/04/02 01:33

rubato6809

総合スコア1380

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

退会済みユーザー

退会済みユーザー

2019/04/02 19:28

ご指摘の通りアンチウイルスソフトのリアルタイムスキャンを無効にしたら実行が早くなりました。皆さんどうもありがとうございました。
guest

0

たぶんですが・・・1回目HDDから実行、2回めメモリから実行、の違いかと・・・・
Windowsは実行ファイルを一時的にメモリに展開します。(キャッシュみたいのもの)で、2回目以降はそれを実行します。なので、実行ファイルそのものの問題ではないと思います。(機能名を忘れたw)
参考:メモリ管理

投稿2019/03/31 21:14

編集2019/03/31 22:17
cateye

総合スコア6851

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

pepperleaf

2019/03/31 23:07

最近の実行プログラムって見た目(書いたコード)は小さくても、裏でいっぱい動いてる事も関係ありそうですね。
cateye

2019/04/01 00:09

ですねw わたしはWindowsは使わない(自動アップデートとかやめてほしいw)ので最近は分かりませんが、Linuxでも通常運用で300スレッドぐらい行きますからねぇ
退会済みユーザー

退会済みユーザー

2019/04/01 07:43

メモリに一度格納されてそれで実行が早くなっているというのは納得できますね。ということはcmd.exe上での初回実行の速度はこれぐらいが限界なんですかね。しかしpingなどの標準のプログラムは初回実行にラグが無い気がします。 powershellで同じプログラムを実行してみて体感を比較したのですが、powershellのほうが気のせいか早い感じもします。 ちなみに同じプログラムをLinux上でもコンパイルして実行してみたんですが、こちらは初回もそれ以降も高速でした。
cateye

2019/04/01 07:52

まぁ、他の要素といえばスワップしてるとかですかね? 書き出し+読み込みでだと結構かかる気がしますが・・・
退会済みユーザー

退会済みユーザー

2019/04/01 08:00

メモリは16GB詰んでるので、該当のプログラムでメモリ不足によるスワップが発生するというのは可能性としては低い気がします。
guest

0

他の回答にあるようにキャッシュが効いて2回目以降の実行が早い可能性もありますが、プログラム内で何をやっているのかも影響あるような気もします。
単純にprintfして終わるようなプログラムなら初回でも即実行されましたので。
ただ当方Windows7環境なので、そこらへんの挙動がWindows10でどう変わっているかはわかりません。

投稿2019/04/01 04:35

ttyp03

総合スコア16998

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

退会済みユーザー

退会済みユーザー

2019/04/01 07:36

プログラム自体はフィルターみたいなもので、すぐに実行が終了する類のプログラムです。
ttyp03

2019/04/01 07:45

質問に挙げているプログラムではなく、極単純なプログラムを作ってみても同様でしょうか? 処理自体は直ぐに終了するものでも、内部的には色々やっていたり、使っているライブラリが重いとかもあるかもしれませんので。
退会済みユーザー

退会済みユーザー

2019/04/01 10:45 編集

CでHello, World!プログラムを書いて実行してみましたが、cmd.exeではラグは見られませんでした。 プログラムのソースコード。 #include <stdio.h> int main(void) { printf("Hello, World!\n"); return 0; } 問題のプログラムはcmd.exeで実行すると初回にラグがあるのですが、powershellではラグがありませんでした。 そのためcmd.exe特有の問題の可能性もあります。また、WSLのbashで実行してもラグはありませんでした。このことからWin32APIとcmd.exeの相性的なものが関係しているのではないかと推測できます。 もちろん私の書いたコードに問題がある可能性もあるのですが、その場合はWSLで高速実行できている説明がつきません。Win32APIを使っている所のコードに問題がある可能性もありますが、APIを実行しているだけなので特に問題のあるところは無いように思えます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問