組み込み C++: STL を使用するかどうか? 質問する

組み込み C++: STL を使用するかどうか? 質問する

私はずっと組み込みソフトウェア エンジニアでしたが、通常は OSI スタックのレイヤー 3 または 2 を担当していました。ハードウェアの専門家ではありません。通常は、携帯電話などの通信製品に携わってきました。つまり、ARM 7 プロセッサのようなものを扱っていることになります。

今、私はより一般的な組み込みの世界に身を置いており、小さなスタートアップ企業で、「それほど強力ではない」プロセッサに移行する可能性があります (これは主観的な部分です)。どのプロセッサに移行するかは予測できません。

組み込みシステムで C++ の STL を使用するかどうかの議論についてはかなり読んだことがありますが、明確な答えはありません。移植性について少し心配な点があり、コード サイズや実行時間についても少し心配ですが、私は 2 つの大きな懸念があります。1
- 例外処理。これを使用するかどうかまだ確信が持てません (組み込み C++: 例外を使用するかしないか?)
2 - 組み込みシステムでの動的メモリ割り当ては、問題を引き起こす可能性があるため、私は強く嫌っています。私は通常、コンパイル時に静的に割り当てられ、固定サイズのバッファのみを提供するバッファ プールを持っています (バッファがない場合は、システムがリセットされます)。もちろん、STL は多くの動的割り当てを行います。

今、私は会社全体で、永久に STL を使用するか、それとも放棄するかを決定する必要があります (STL はいくつかの非常にコアなソフトウェアに組み込まれます)。

どちらにジャンプしますか? 超安全ですが、C++ を構成する要素の多くを失い (私の意見では、言語定義以上のものです)、後で問題が発生するか、多くの例外処理と、おそらく他のコードを今すぐ追加する必要がありますか?

私はただブーストしかし、1) 使用したいすべての組み込みプロセッサに移植できるかどうかはわかりません。また、2) Web サイトには、組み込みシステム (特に FSM) については特定の部分を保証/推奨していないと記載されています。Boost を選択して、後で問題が見つかった場合は...

ベストアンサー1

私は毎日リアルタイム組み込みシステムに取り組んでいます。もちろん、組み込みシステムの定義は皆さんの定義と異なるかもしれません。しかし、私たちは STL と例外をフル活用しており、手に負えない問題は発生していません。また、動的メモリも使用しており (非常に高速で、1 秒あたり大量のパケットを割り当てるなど)、カスタム アロケータやメモリ プールに頼る必要はまだありません。割り込み ハンドラでは C++ も使用しています。boost は使用していませんが、それは特定の政府機関が許可していないためです。

私たちの経験では、頭を使って独自のベンチマークを実施すれば、組み込み環境で多くの最新のC++機能を実際に使用できます。Scott Meyerの効果的なC++第3版およびSutterとAlexandrescuのC++ コーディング標準健全なプログラミング スタイルで C++ を使用できるように支援します。

編集: 2 年後に賛成票をもらったので、更新情報を投稿します。開発はかなり進んでおり、ついに、高パフォーマンスの条件下では標準ライブラリ コンテナーが遅すぎるコード上の箇所にたどり着きました。ここでは、実際にカスタム アルゴリズム、メモリ プール、および簡素化されたコンテナーに頼りました。しかし、これが C++ の素晴らしいところです。標準ライブラリを使用して、ユース ケースの 90% でその優れた機能をすべて利用できます。問題が発生してもすべてを捨てるのではなく、問題のある箇所を手動で最適化するだけです。

おすすめ記事