エントリー

昔の癖

最近、私の作ったプログラムやマクロ、PLC回路やエクセルシートなんかの改造とかメンテナンスがあり、若い人達から質問が良く来ます。

その半分以上が、昔の癖の所だったりします。
その昔CPUが8Bitでクロックが1MHzとかの頃、メモリーも大容量3KByteとか、外部記憶装置がテープしか無いとかそんな時代だったんです。(私より以前の方はもっとすごかったんですが)
1バイトでも小さく、1クロックでも早くってのが当たり前でした、今のように1クロックで演算を終了出来る命令ってNOP(何もしない命令)位でしたからね。(実際には1クロックでは終わらないんですが)
ループなんかして計算すると、その1クロックってずいぶん結果が出るまでの時間に違いがありました。

最近は気をつけているんで、こんな書き方はしないんですが、昔のソースなんか見ると幾つか残ってたりします。

簡単な例ですが、変数bを2で割って変数aに格納する場合なんですが、通常なら
a = b / 2 ;
となるんですが、そこを
a = b >> 1 ;
って書くんです。
昔のCPUだと整数の割り算でもかなりのクロック数を費やします(8Bit時代には除算命令自体が無いものもあったんで、さらに演算時間は増えます)
それをシフト命令で高速化してしまおうってのが一般的でした。

これは簡単な例なんですが、こいうった高速化テクニックって様々なものがありました。
その殆どが、高速化と引き換えに、ソースの読みにくさに繋がっていったように思います。

例えば、40個の箱の12番目から数えて、bの変数の倍の場所からさらに6個後ろの箱の番号を求めなさい、といった計算をするとします。(普通はこんなことはしないですが、あくまで例です)
すると、書いてある通りだと
a = 12 + b * 2 + 6 ;
になるんですが
a = b << 1 + 18 ;
って書くんです、そうすると上の文章が無くなって、この計算式だけ見ると、18って何じゃ?ってことになります。

今は、コンパイラーが勝手にこういったことを暗黙的にやってくれたり、乗算や除算が早くなったりしていますので、判りやすく書けるようになりました。

なんだか、おじいちゃんが孫に「昔はな~」って言ってるみたいです。( -o-)=3

ページ移動

コメント

  • コメントはまだありません。

コメント登録

  • コメントを入力してください。
登録フォーム
名前
メールアドレス
URL
コメント
閲覧制限

ユーティリティ

新着コメント

Re:2017ふれまにっ杯募集
2017/01/30 from tatsuru3284
Re:ついに
2016/03/18 from redinpules.stt.TV
Re:ついに
2016/03/17 from Tatsuru
Re:ついに
2016/03/17 from redinpules.stt.TV
Re:県オープンの余韻
2016/02/18 from Tatsuru

過去ログ

Feed