📉

【組込み】コードサイズを削減するときの観点

2020/09/27に公開

普通のPC環境では気にする必要はないが、
組込みだと実行ファイルを保存するメモリが小さすぎて、どんな手を使ってでもコードサイズを削減する必要がある。
(なお大体処理速度とトレードオフなのでどちらを取るか決めないといけない)

そんなときのメモ。

対象

  • C言語
  • Java

コード削減には関係ないもの

  • [Java] static field(ビルド時、定数に置換する)
  • [Java] interface/(abstractメソッドしかない)abstract class
  • ローカル変数
    • 実行時のメモリ使用量には関係する
  • [C] マクロ

関数

  • 関数のネストが深いもの(関数呼び出しが多いもの)を減らす
    • if文のネストを減らすのはサイズ的にはあまり意味がない
  • [C] 呼び出し回数が少ないinline展開を減らす(処理速度が落ちる)
  • 引数を減らす

類似コードを関数にして共通化

共通化するために、引数が増えるとその分性能が落ちる。

その他

  • [Java] ローカル変数に値を代入する処理は4バイト使う(らしい)
    • 1回しか参照しないのであれば、ローカル変数に代入しないようにすればコード削減になる
    • 変化する値を退避している場合は消してはいけない
  • [C] 複雑な計算をするマクロを、1関数で何回も呼び出す場合
    • ローカル変数に一回代入して、それを使い回す

Discussion