・喫煙所でボケーっとしてたら他の集団が雑談してた.聞きたくなくても聞こえてくるので適当に聞いてたんだけども,その内容が明らかにおかしい笑 その内容はこんなのだった
1.*a++ = foo;って判りにくいじゃん.普通に *(a+i) = foo;でいいだろ 2.foo <<= 2;ってなんだよ.シフト演算考えるの面倒だし時間かかるじゃん.普通に foo = foo * 4でいいだろ 3.staticとか constって何?俺の辞書にはそんなもの無いんだけど 4.誰々さんがコンパイラの最適化抑止とか変な事やってんだよ.素直に最適化させてやればいいじゃん |
1.おそらくループ制御文の中身の話だろうし間違ってはいないけど,それはBASICですか. 2.シフト演算と乗除演算では,平均してシフト演算のほうが速いです. 3.組み込み系では引数ポインタの内容を間違って書き換えたりすると致命傷になるので,あらかじめ抑止が必要です. 4.組み込み系では処理速度に依存する場合があります.最適化されちゃうと意図しない動きをする事があります. |
・あの話をした彼がそこまで考えているとは思えないと思う今日この頃ですぉ
ということで,ツッコミがあったのでちょっと整理.
・1.速度よりはまず安全性
これでもか!というほど過剰な範囲チェックをカマしているので,速度よりも安全性を取るというよりむしろそれが基本っすね.しかし関数の引数でポインタ受け取りしたのを配列としてアクセスするのは,ソースの流れとしてどうかと思うです.プログラム的に間違って無くてもすっごく違和感あるです.俺だけ?
・2.分かりやすいコードを書くためにシフトは最適化の過程で必ずされるもの
前のプロジェクトで使っていたコンパイラは「最適化?なにそれ美味しい?」という物だったので人間最適化が必要だったんですが(ぉ 今使ってるのはどうかな?と思ってマシンタイムを私事で利用して試してみた.
検証コード
1: a = foo->bar * 4; 2: a = foo->bar << 2; |
1: mov al,offset [dword 0x02] shl al,0x02 2: mov al,offset [dword 0x02] shl al,0x02 |
・3.それC言語しってるとはいわない。
それでも自称SEらしいですw
・4.意味のないアクセスは無駄として最適化で消されてしまうことがありますね
ならTSK_SLEEPあたり使えよという話も出てきそうですが,RTOS系が乗ってるならまだしも,OSすら乗っていないターゲットがあるので,forループによる時間調整を行ったりする事が未だに常套テクとして使われているです.ま,ターゲット次第の話っすね.
という事でその道の人なら細かいツッコミが入るネタだったのですが,この話はスタンスについてネタにしたかった訳で(笑 しんさんのようにコンパイラの最適化やら何やらを想定してる訳ではなく,そんなのシラネー.ワカンネーからコレでいいじゃんという彼のスタンスが小ネタですた.constに至ってはそんなのイチイチ書くの面倒とか(ぉぃ
・一回書いたけど消したのですよ.あえて具体的な年数いう事ないかなと.実際のところ25年ほどなので30年も変わらねーなーとかw
・車いぢいぢ.
カーナビとGPSレーダーのアンテナをメーターフード内に埋め込んでダッシュボードスキーリ作戦で居た訳ですが,細かい段差がある道を走ったりすると内部からカタカタと異音が鳴るようになってしまった.原因は判っていて,適当に処置した配線がフード内で振動して鳴っているので,これをなんとかしよう!というのが今日の目的.
ということで フード内のアンテナ達
左:カーナビのGPSアンテナ 右:レーダーのGPSアンテナ
こいつらの配線をスピーカー買ったときに付いてきた吸音材で巻いてみたり固定してみたりクリップで留めてみたり. こんな感じ
そして元通りにフード内の内装部品を戻しておわり.適当にそのへんうろちょろしてみて段差乗り上げても音がしなくなったので完了!
・あ,フードが付いた状態の写真忘れた.ということで 別の日の別角度から.
こんな感じになります.
Generated by Ange v2.6.2.0