📉
【組込み】コードサイズを削減するときの観点
普通のPC環境では気にする必要はないが、
組込みだと実行ファイルを保存するメモリが小さすぎて、どんな手を使ってでもコードサイズを削減する必要がある。
(なお大体処理速度とトレードオフなのでどちらを取るか決めないといけない)
そんなときのメモ。
対象
- C言語
- Java
コード削減には関係ないもの
- [Java] static field(ビルド時、定数に置換する)
- [Java] interface/(abstractメソッドしかない)abstract class
- ローカル変数
- 実行時のメモリ使用量には関係する
- [C] マクロ
関数
- 関数のネストが深いもの(関数呼び出しが多いもの)を減らす
- if文のネストを減らすのはサイズ的にはあまり意味がない
- [C] 呼び出し回数が少ないinline展開を減らす(処理速度が落ちる)
- 引数を減らす
類似コードを関数にして共通化
共通化するために、引数が増えるとその分性能が落ちる。
その他
- [Java] ローカル変数に値を代入する処理は4バイト使う(らしい)
- 1回しか参照しないのであれば、ローカル変数に代入しないようにすればコード削減になる
- 変化する値を退避している場合は消してはいけない
- [C] 複雑な計算をするマクロを、1関数で何回も呼び出す場合
- ローカル変数に一回代入して、それを使い回す
Discussion