トレードオフ

組み込み系のソフトウェアでは、次のトレードオフがあります。

  • オブジェクトサイズは小さくしてね。
  • こんな機能やあんな機能も欲しいから追加してね。
  • 遅いから速くしてね。

機能を追加する方法

機能を追加する
機能を追加するとしか言いようがないですね。ここで作業のしやすさや工数や出来上がりのオブジェクトサイズやパフォーマンスに関わってくるのが最初の設計なのです。なので、機能追加しやすいように設計しましょう。

オブジェクトサイズを小さくする方法

使用しなくなった変数の削除
これが一番意味があるかな。副作用はないし。
リファクタリングにより共通部分を関数化
関数コールが増えるので遅くなる。結局インライン関数となってしまい、コードサイズとしては変わらなくなってしまう。見通しが良くなっただけでも良しとするか。
無駄な機能を外す
使うかもしれないので外せない。とりあえず、コンパイルマクロを使用して、#ifdefで外しておくのは有効かなぁ。結局フルスペックでコンパイルするとやたら大きいオブジェクトが出来上がるのは変わりません。

速くする方法

関数のインライン展開
使いすぎるとオブジェクトサイズが大きくなる。なので、プロファイルを確認して、コール回数の多いものに限定すればよいもかな。
特定のケース専用の処理パスを追加
もちろんコードが増える分オブジェクトサイズが大きくなる。また、たいていの場合条件判定部分が増えるので、チェックするオーバヘッドが逆にパフォーマンスの低下に繋がる可能性もある。
メモリ管理
C++ではガベージコレクタがないのでフラグメンテーションが発生しやすい。この状態になると、初期状態と比較してnew/deleteに時間がかかるようになってしまうのです。そこで何らかのメモリ管理機構を作ってやると良いわけですな。そのうち具体的なコードでも載せてみようかな。

結局どうしようもなくなったら、アーキテクチャを考え直すとか、根本的なところに手を入れないと駄目なのです。