0

組み込みシステムのフットプリントの少ない成果物を設計またはコーディングする際に留意すべき点を投稿してください。

一般的な情報が必要なため、コンパイラやプラットフォームの詳細は提供していません。ただし、LinuxベースのOSに関する特定の情報も歓迎します。

4

4 に答える 4

2

どの程度まで下げたいかによります。私は現在会計プリンターのコーディングを行っていますが、OS はなく、主なルールは動的メモリ割り当てではありません。面白いことに、私は乗組員に完全に最新の C++ をコーディングするよう説得しました ;)。

実際には、私たちが決定したいくつかのルールがあります。

  • 動的割り当てなし
  • したがって、STL はありません
  • 例外処理なし (明白な理由)
于 2010-01-19T16:12:11.300 に答える
1

一般的な答えはありません。言語/プラットフォームに固有のものだけです...しかし

小さなメモリフットプリント...

  1. Java、C#/mono、PHP、Perl、Python など、ガベージ コレクションのあるものは使用しないでください
  2. 可能な限り金属に近づく, Use C
  3. 動的割り当てを使用している場合は、多くのプロファイリングを実行して、メモリが割り当てられている場所を確認します
  4. 賢明なチャンクとヒープのサイズを割り当てることにより、ヒープの断片化を防ぐようにしてください
  5. 再帰関数、特に malloc() を使用する関数は避けてください。チャンクを割り当ててポインターを渡す方が適切です。
  6. free() を使用してください ;)
  7. タイプが必要以上に大きくないことを確認してください
  8. コンパイラの最適化を有効にする

もっとあるでしょう。

于 2010-01-19T16:14:02.087 に答える
1

実際にフットプリントを低くするには、Assembly を直接行うことを検討してください。

C または C++ の Hello World が 20kb 以上であることは誰もが知っています (すべてのデフォルト ライブラリがリンクされるため)。アセンブリでは、このオーバーヘッドはなくなりました。コメントで指摘されているように、標準ライブラリをかなり減らすことができます。ただし、アセンブリをコーディングするときに得られるコード密度は、コンパイラがより高度な言語から生成するよりもはるかに高いという事実は変わりません。したがって、すべてのバイトが重要なコードの場合は、アセンブリを使用してください。

また、プロセッサの能力が低いデバイスでプログラミングする場合、(たとえば) マシンを制御するのに十分なほどリアルタイムでプログラムを高速化するには、アセンブリ言語でのプログラミングが唯一の方法かもしれません。

于 2010-01-19T16:14:49.090 に答える
0

このような制約に直面した場合は、システムが負荷の下で動作することを保証するために、メモリを事前に割り当てることをお勧めします。「オブジェクト プーリング」などの設計パターンを使用して、システム内でリソースを共有できます。

C言語は、厳密なリソース (つまり、メモリと計算サイクル) の制御を可能にします。それは強く考慮されるべきです。

再帰は悪用されやすく、スタック オーバーフロー状態になる可能性があるため、避けてください。

于 2010-01-19T16:16:25.830 に答える