Windows同じことを実行するプログラムでも、条件判断「if」と「switch」で処理時間が違いますよというお話。0;}アセンブリコードに変換する。比較命令cmpを使ってaの値が0の時、「ゼロ・フラグ」を「1」にする。条件付きジャンプjneで分岐処理をする。jne*1は、「ゼロ・フラグ」が「0」の時(つまり、aが0でない時)に指定したアドレス($LN5@wmain)に制御を移す。「ゼロ・フラグ」が「1」の時(a==0の時)は、mov命令でbに1を代入する。ifの場合は、上記の判断を繰り返し実行している。ecxレジスタの値を4倍して、$LN10@wmainの値を足して、次処理のアドレスを取得する。ecxレジスタには、switchの条件となる値が入る。a=1の場合、1を4倍し$LN10@wmainの値を足し、アドレスを取得する。$LN10@wmainラベル内の該当アドレス(1)で得られたアドレス)にジャンプする。DDに続けて書かれているラベルの処理が実行される。ifでは、条件がヒットするまで条件判断を繰り返す。それに対し、switchでは分岐内容をテーブルに展開し、条件判断は掛け算と足し算でアドレスを特定して処理する。そのため、条件判断が多くなるほどifの処理時間は遅くなる。switchでは先頭と後ろにある判断項目で、ジャンプに要する時間は変わらない。ifとswitch*2以外にも、同じことを実行しているのに処理効率が違うコードがあると思います。今回比較したように、アセンブリコードレベルで処理を比較するのも面白いかもというお話でした。Equalの時、Jumpする*2:ifとswitchだと感覚的にswitchの方が効率が良さそうだと分かりますが、比較してみました。11系をインストールした際の作業メモです。Toolと連携して、サーバに関す...2010-05-20Cassandraをdaemontoolsで起動・管理するOS起動のタイミングでCassandraを起動するために、daemontools...2010-02-07Sambaのインストールソースからのインストール作業メモ。1はてなブログをはじめよう!jitsu102さんは、はてなブログを使っています。ブログを報告する引用をストックしましたストック一覧を見る閉じる引用するにはまずログインしてくださいログイン閉じる引用をストックできませんでした。再度お試しください閉じる限定公開記事のため引用できません。