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

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

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

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

Q&A

解決済

2回答

1876閲覧

c言語の処理時間の違いについて

miyakkatto0

総合スコア4

C

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

0グッド

0クリップ

投稿2021/07/13 14:44

下記のプログラムでmain関数でf1関数を呼び出した場合とf2関数を呼び出した場合に、処理時間に差がある理由を教えてください。

プログラム
void f1(int n) {
int i, j;

for (i = 0; i < n; ++i) for (j = 0; j < n; ++j) ;

}

void f2(int n) {
int i, j;

for (i = n; i > 0; --i) for (j = n; j > 0; --j) ;

}

int main(int argc, char *argv[]) {
f1(100000);
// f2(100000);

return 0;

}

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

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

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

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

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

y_waiwai

2021/07/13 14:48

どう差があるんでしょう 具体的な情報を提示しましょう
miyakkatto0

2021/07/13 14:54

回答ありがとうございます。 プログラムを実行し、timeを用いた結果 f1の場合 real 0m22.941s user 0m22.875s sys 0m0.000s f2の場合 real 0m15.747s user 0m15.734s sys 0m0.000s になりました。 f1とf2で同じことをしてると思ったのですが、上記のように差がでる理由を教えてください。
guest

回答2

0

ベストアンサー

forのループ条件の比較に違いがあります
0との比較は1命令(最短の命令)で済みますが、nとの比較は、レジスタにnを入れてからレジスタ相互の比較という命令となるため、それだけ実行時間がかかってしまいますね

投稿2021/07/13 14:58

y_waiwai

総合スコア88042

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

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

miyakkatto0

2021/07/13 14:59

ありがとうございます。
y_waiwai

2021/07/13 15:05

こういうコードの場合は、最適化などを効かせると実行時間の差がなくなったりします。 ループ変数の参照が行われないループの場合、f1のコードであっても、最適化で、f2のループにしてしまったりします
guest

0

まあ、CPUが何か、コンパイラが何か、またコンパイラの最適化のレベルなどによって変わってくると思いますが…

f1のほうは、ループの条件判定でjnという変数を比較しているので、まず比較の演算が必要ですし、2つの変数をもしかしたらメモリからレジスタにロードする時間がかかるかも知れませんが、f2のほうは片方が定数なのでロード時間はf1より短く済むかもしれないことや、jが0になった時点でループを終了すれば良いということから、CPUによっては比較演算すら必要ないかもしれません。

投稿2021/07/13 15:02

itagagaki

総合スコア8402

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問