フットプリントの少ない成果物を設計またはコーディングする際に考慮すべき点
-
21-09-2019 - |
質問
組み込みシステムのフットプリントを削減する成果物を設計またはコーディングする際に留意すべき点を投稿してください。
一般的な情報が必要なので、コンパイラやプラットフォームの詳細は提供しません。ただし、Linux ベースの OS に関する具体的な情報も歓迎します。
解決
どれだけ低くしたいかによって異なります。私は現在、会計プリンター用のコーディングを行っていますが、OS はなく、主なルールは動的メモリ割り当てではありません。面白いことに、私はまだ乗組員に完全に最新の C++ をコーディングするよう説得していました ;)。
実際には、私たちが決めたルールがいくつかあります。
- 動的割り当てなし
- したがって、STLはありません
- 例外処理がありません (明らかな理由)
他のヒント
はありません 一般的な答え, 、言語/プラットフォームに固有のもののみ...しかし
メモリ使用量が小さい ...
- Java、C#/mono、PHP、Perl、Python、またはガベージ コレクションを備えたものは使用しないでください。
- として取得 可能な限り金属に近いもの, 、Cを使用します。
- 動的割り当てを使用している場合は、多くのプロファイリングを実行して、メモリがどこに割り当てられているかを確認します。
- 必ず確認してください ヒープの断片化を防ぐ ヒープの適切なチャンクとサイズを割り当てることによって
- 避ける 再帰関数 特に malloc() を使用するもの。チャンクを割り当ててポインタを渡す方が良いでしょう。
- free() を使用してください;)
- 型が必要以上に大きくなっていないことを確認してください
- コンパイラの最適化をオンにする
もっとあるでしょう。
本物の低フットプリントのためには、直接アセンブリ行うことを検討ます。
CまたはCでのHello Worldは、++(なぜならリンクされます、すべてのデフォルトライブラリの)20キロバイト+であること私たちは皆知っています。議会では、このオーバーヘッドがなくなっています。コメントで指摘したように1は、標準ライブラリにかなり減らすことができます。アセンブリコード化するコンパイラよりもはるかに高いときにあなたが得ることができるコード密度が高い言語から生成することをしかし、事実は残ります。だから、アセンブリのすべてのバイト事項、使用コード用ます。
アセンブリ言語でのプログラミング能力の低いプロセッサを搭載したデバイス上でプログラミングするときにまた、それがリアルタイムに十分であるために十分な速さのプログラムを作る行うには、あなたの唯一の方法であるかもしれない制御機器(例えば)
は、それがシステムに負荷がかかって動作することを保証するために、を事前に割り当てるメモリのにお勧めです。そのような「オブジェクトプーリング」としてデザインパターンは、システム内の共有リソースに使用することができる。
の C の言語は、タイトなリソース(すなわち、メモリ・コンピューティングサイクル)の制御を可能にします。それを強く考慮しなければならない。
は避けを再帰のそれが乱用するのは簡単ですし、スタックオーバーフロー状態になりますようます。