ラベル

技術 (81) 開発 (79) ゲーム (68) アプリ (64) 福岡 (59) 趣味 (59) android (54) アニメ (22) レトロゲーム (22) 温故知新 (21) ガンダム (19) レポート (19) WEBサイト (17) 経済 (17) iOS (9) 麻雀 (7) グルメ (5) マンガ (4) Wear (1)

2014年7月8日火曜日

switch文使うなと言われていたファームウェアの話

Shunです。

最近、初心に帰ってJavaの本を読んでますです。

さてさてJavaのswitch文説明を読み返していて思い出したこと。

わたくし、ファームウェア開発出身者です。
C言語+アセンブラでの開発です。
なぜかswitch文に抵抗があります。

私がやっていたファームウェア開発では
switch文なんか使うと白い目で見られたものです。

その理由についてちょっと説明。
(この話はうろ覚え、かつ、今ググって裏がとれなかったので注意)


switch文が嫌われていた理由。
それは処理速度。
if文で書いたほうが速いという。

それはアセンブラになったときアドレスの
「絶対参照」と「相対参照」の違いが出るため。
  if文は「相対参照」
  switch文は「絶対参照」
になる。
(これは当然コンパイラや対象チップによるので注意)

相対参照の命令コードと絶対参照の命令コードでは
相対参照のほうが早く処理できる。
命令コードが絶対参照より相対参照のほうが少なくすむため。
参考例:
http://wob-site.com/tech/dem/instruction_set/branch_jump/

1Byteのコードの差だが超短時間で繰り返し処理が必要な仕様の
ファームウェアにとっては重要。
if文でバカみたいにずらずら書いたほうが
相対参照のジャンプ命令にしてくれて速い。


。。。ほんとか?
書いていて疑問に思っていろいろ調べたが
この記憶、怪しいね。
「if文は相対参照、switch文は絶対参照」とか
命令コードの大きさの差で処理速度が変動とか。


まあ、androidの開発でJavaを使ってアプリ作る分には
なんらswitch文を使うのに問題はないでしょう。

0 件のコメント:

コメントを投稿