電子書籍の厳選無料作品が豊富!

VCで600行ぐらいのifelse文をコンパイルしようとすると
最大値を超えるというコンパイルエラーがでました。

そこで気になることがあります。コンパイル後は最適化されると聞きますが
例えばifelseを100行ぐらいつらなるソースをコンパイルしたとき、
この場合はマシン語の中では1行目から順番に比較していっているのでしょうか。
つまり100行目までに真となる値がない場合は100回比較しているのでしょうか。
コンパイル後はswitch文の場合も似たような処理をしているのでしょうか?
どうぞご教授ください。

A 回答 (1件)

最適化というのは、演算とかループとかの処理に対して最適化されるのが


普通だと思いますので、if~elseの文にはあまり最適化の恩恵は
ないと思います。(私の知らないコンパイラとかで最適化できるものも
あるのかも知れません。)

if~elseの文は通常、その順番どおりに比較されるので、当然最後の
if文で真になることも十分ありますし、それまでの比較を通る分、
速度的には遅くなります。

switch文の場合は、内部でテーブルとかを作って処理する場合が自然だと
思います。最後のcase部で真になる場合でもそれまでの比較が
行われているとは限らないので(振り分けているといった感じかも)
速度的には変化はないと思います。

おおまかな内容ですので答えになっていないかもしれませんが、
いかがでしょう?
    • good
    • 0
この回答へのお礼

レスありがとうございます。参考になります。
自作のdllでunicode→sjisをやっているのですが
それがifelse文の2階層で永遠とやっているコードなのです。
速度的には今のところ別に問題はないのですが、
switch文に訂正してみて色々と実験してみます。

お礼日時:2002/06/01 19:47

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!