ページ 11

for文やwhile文について

Posted: 2009年11月24日(火) 19:00
by たいやき
for文やwhile文、関数は何バイトあるのでしょうか?

Re:for文やwhile文について

Posted: 2009年11月24日(火) 19:06
by softya
意味が分かりません、機械語で何バイトという意味でしょうか?
そういう意味なら、使うコンパイラ、CPU、最適化レベル、書かれているソースコードの内容で変わるので質問自体が無意味です。

Re:for文やwhile文について

Posted: 2009年11月24日(火) 19:09
by たいやき
そうなんですか。わかりました。回答ありがとうございました!

Re:for文やwhile文について

Posted: 2009年11月24日(火) 19:29
by たいやき
すみません。質問変えて
int func(void)
{
int i;
int flag=1;
int n;
for(i=0;i<10;i++)
{
if(flag)
{
n++;
[pre]          }
if(i=i%2)
{
flag=0;
}
[pre]
}
}と
int func(void)
{
int i;
int n;
for(i=0;i<10;i++)
{
if(i=i%2)
{
n++;
break;
}

[pre]
}
for(i=0;i<10;i++)
{
if(i=i%2)
{
n++;
}


}
}
とどちらが軽いとしたらどちらでしょうか?

Re:for文やwhile文について

Posted: 2009年11月24日(火) 19:33
by たいやき
文間違えました。
int func(void)
{
int i;
int flag=1;
int n;
for(i=0;i<10;i++)
{
if(flag)
{
n++;
}
if(i=i%2)
{
flag=0;
}
[pre]
}
}と
int func(void)
{
int i;
int n;
for(i=0;i<3;i++)
{
if(i=i%2)
{
n++;
break;
}

}
for(;i<10;i++)
{
if(i=i%2)
{
n++;
}


}
}
とどちらが軽いとしたらどちらでしょうか?

Re:for文やwhile文について

Posted: 2009年11月24日(火) 19:47
by Mist
どちらのプログラムもifの条件がおかしいんだけど。
> if(i=i%2)

正しくは"if(i==(i%2))"じゃないのかな?
何がしたいのかさっぱり分からないプログラムだけど、ループの実行回数も大差ないし一緒と考えてもいいと思いますけど。

Re:for文やwhile文について

Posted: 2009年11月24日(火) 19:52
by たいやき
回答有難うございます。
int flag;があるかないかで変わるのかと思ったのですが。それでも大差ないのでしょうか?

Re:for文やwhile文について

Posted: 2009年11月24日(火) 20:52
by softya
プログラム実行効率の比較としては不適格なソースコードでしょうね。
そもそも、nの最終カウント数が違いますよ。

Re:for文やwhile文について

Posted: 2009年11月24日(火) 22:27
by たいやき
間違えました。
if(flag)


{


n++;
       flag=1;

}

二番目の関数の
if(i==i%2)
{
   n++;

}
です。

Re:for文やwhile文について

Posted: 2009年11月24日(火) 22:55
by たいちう
コンパイルを通るように直して、それぞれ実行してみてください。
実行時間に差がありましたか?
現在のあなたにとっては、それ以上の差はありません。

もっと詳しく知りたいならば、もっと言語を理解してから質問しましょう。
また、処理が遅くて困っているプログラムがあるならば、それについて
具体的な質問をしてくれれば、回答のしようもあると思います。

Re:for文やwhile文について

Posted: 2009年11月24日(火) 23:38
by softya
どんな機械語コードが出ているか見たければ、
「プロジェクト」→「xxxのプロパティ」→「構成プロパティ」→「C/C++」→「出力ファイル」→「アセンブリの出力」を「あり」にすればアセンブラソースが見れます。
それを見て効率的がコード出ているか判断すれば良いと思います(アセンブラは勉強してください)。
※ リリースビルドしないと最適化されないなので必ずリリースビルドで行ってください。

今のコードで比べても無意味なことが分かると思います。
生半可な知識で書き方を工夫してもコンパイラの最適化が上を行きます。あからさまに無駄な書き方、遅いアルゴリズムを選ばない限りはコンパイラにお任せしましょう。