非常にポータブルな使い方であれば、標準ライブラリはほとんどありません。しかし私はこのアプローチを完全には理解していません。 活発に使用されているC++環境では、標準ライブラリの(ほとんどの場合、すべてではないにしろ)サポートが不足していますか?活発に使用されているC++環境では、標準ライブラリの(ほとんどの場合、すべてではないにしろ)サポートが不足していますか?標準的なライブラリー(例えば、「ニンテンドー3DSのためのgccのXバージョン」)はありませんそのため、特定のC++の環境(コンパイラ、OSの、ハードウェア、など)</p> <p>目指すなどBOX2DやTinyXML2のようないくつかのC++のライブラリを探してい
答えて
簡易返答は、STLパッケージを含まないことを選択した場合に表示されます。
ほとんどのIDEでは、プロジェクトに#include <package_name>
のSTLを呼び出す項目がない場合、STLはコンパイル時には含まれません。
あなたが特にIDE /コンパイラSTLを回避するための大きな理由の
一つを通じてSTLを除外しなければならない場合があるかもしれないが
は、最終的なコンパイル済みのファイルサイズを小さくすることです。私は標準ライブラリ(例えば、「ニンテンドー3DSのためのgccのXバージョン」)はありませんそのため、特定のC++の環境(コンパイラ、OSの、ハードウェア、など)について尋ねています。 – JesseTG
C++標準ライブラリのサポートは、さまざまなコンパイラベンダーによって異なりますが、同じコンパイラの異なるバージョン間でも異なります。これは、組み込みシステムやさまざまなコンソールで特に当てはまります。
「変化する」とは、バグ、機能の実装方法が異なること、機能が不足している可能性があることを意味します。たとえば、Androidには非常にminimalのC++標準ライブラリが実装されています。
多くの奇妙で素晴らしいC++コンパイラがあります。それはGCCとVisual Studioだけではありません。たとえば、任天堂はGreen Hillsコンパイラを使用しています。
さまざまなコンパイラがあるため、多数のコンパイラをサポートする最も良い方法は、C標準ライブラリが提供する機能だけに固執することです。多くのポータブルライブラリは、より現代的なC++機能の使用を避けています。
私が考えることができる唯一の環境は、フリースタンディングなもの(オペレーティングシステムとシングルプロセス組み込みプログラム)です。もちろん、一部の開発者は積極的にSTLの使用を避けますが、これは環境上のサポートの欠如よりも設計上の決定です。私は、これらの制限された環境における最大のハードルは、例外サポート(多くのSTL関数が投げる)であると信じています。これらをサポートするには、C++のABIを移植してライブラリをunwindする必要があります(スタックの巻き戻しとcatch文への移動を行うため)。これらの必要なビットを実装するのを止めるものは何もありませんが、リンクされたリストのようなものに対する基本的なサポートのためだけに膨らんでいる依存関係が増えています。 ABIを移植するには、the OSDEV wiki entryを参照してください。
新しいC++標準(C++ 11以降)には他にも依存関係があります。私は想像することができますstd::threadは、pthreadsなどのスレッドの実装が必要です。 std::chronoはおそらく、それとCの標準ライブラリ時間の間に実装されたいくつかの中間層を必要とするでしょう。オペレーティングシステムのサポートが必要なSTLの機能が多分あるでしょう。
STLの部分も非常に重要です。テンプレートはしばしば、最終的なバイナリサイズをかなり大きくします。例えば、std::listの場合、std::list<MyClass1>
およびstd::list<MyClass2>
は、2つの異なる容器の特殊化をもたらす。コードは非常によく似ていますが、具体的に要素タイプを扱うために複製されます。リンクリストの他の実装では、ノードをリンクするためにvoidポインターを使用し、必要に応じて適切なクラスにキャストします。このように、などのintのための1つのインスタンス化されたリストクラス、のchar *、MyClass1が、そこにあるの増加バイナリサイズは、組み込み環境では、多くの場合、受け入れられないが、LIBAがLIBAを実装したときに、それはまた、問題となることに留意しなければならない:: LinkedListのおよびLibB LibB :: LinkedList。
実装の品質は、これらの日、問題の少ないなっています。また、GCCは多くのアーキテクチャをターゲットにしているので、新しいコンパイラ標準が利用できるようになります(上記のように、STLの一部の機能を移植する必要があります)。私が使用した最も古いGCCは、GCC v4.3か、それに似たものが組み込まれたPowerPCデバイス用です。これは2010年にリリースされ、完全なSTLサポートを受けました。要約すると
、非常に集中機能が設定されたライブラリの必要性がまだ助けることができますが、彼らはラップOSに依存する動作機能を提供する場合、私の意見では、彼らはどのように多くのプラットフォームプロジェクトの目標に減少。未処理のデータ構造とアルゴリズムのサポートには、間違ってはいけません。最終的には、プラットフォームのいくつかのサブセットをターゲットにする必要があります。 C++ 11では、使用するデスクトップ/サーバーオペレーティングシステムの99%、組み込みLinuxデバイスの99%を対象としています。別の答えで強調されているように、Androidは問題になりましたが、実際に現代的な環境を得るために必要なすべてのビットを得るためにthis pageが強調表示されているようです。組み込み環境のために設計
- 1. 標準C++ライブラリにはどのような例外クラスがありますか
- 2. C++コンパイラの中で最高の、標準的な(うまくいけば無料の)コンパイラはどれですか?
- 3. STLがC++用であるため、C(C99など)のための標準化された一般的なライブラリはありますか?
- 4. C++の標準ライブラリにハッシュテーブルの実装が含まれていないのはなぜですか?
- 5. Haskellの標準ライブラリに<<がないのはなぜですか?
- 6. GNOMEやKDEなどのLinuxグラフィカル環境では、スクロールはどのようにサポートされていますか?
- 7. 標準的なZIPではどのアルゴリズムが使用されていますか?
- 8. c標準ライブラリでstdinはどこに定義されていますか?
- 9. 標準ライブラリでコンパイルエラーが発生しています。どうしたの?
- 10. C++標準ライブラリのヘッダはどこにありますか
- 11. あなたは満足しているWindowsの下でRails開発環境を実行していますか?
- 12. CPythonが標準ライブラリに `sphinx.autodoc`を使用しないのはなぜですか?
- 13. C++ 11標準はboost :: anyのようなものを提供していますか?たとえば<code>boost::function</code>ため
- 14. ブロックの環境に孤立していないDSLを書くにはどうすればいいですか?
- 15. NDKで標準のC++ライブラリが見つかりません
- 16. "ブール短絡"は標準で規定されているのか、あるいはほとんどが最適化として使用されていますか?
- 17. カスタム言語での標準的なCライブラリのサポート
- 18. C#の標準ライブラリよりも優れているRegex
- 19. std :: threadの標準はどのようになっていますか?
- 20. 異なるコンパイラでのC++標準ライブラリの実装
- 21. すべての標準ラベルになりましあいまいなので、私は私のプロジェクト全体の標準的なWPFのラベルを使用していた別のライブラリ
- 22. log10f()は標準的な数学ライブラリの一部ではありませんか?
- 23. オブジェクト(つまり、フラッシュ)の周りのa-hrefはちょうど悪いアイデアか、実際にそのようなオブジェクトのクリックをどのように処理しなければならないかについての標準がありますか?
- 24. すべてのC++実装にC++標準ライブラリ関数とクラスが含まれていますか?
- 25. GCC - 標準ライブラリの致命的なエラー
- 26. なぜC++標準ではこのような恐ろしい使い方を禁止していませんか?
- 27. QtはC++ライブラリとして分類されていますか?ライブラリでない場合、QTをどのように分類しますか?
- 28. 異なるC++標準とリンクするC++標準ライブラリ
- 29. Rails環境は、開発環境の中でさえ、本番環境に固執しているようです。
- 30. 企業環境の絶え間ない変化のために開発していますか?
人々は時々STLを避けます。真http://stackoverflow.com/questions/2226252/embedded-c-to-use-stl-or-not – computerfreaker
@computerfreaker、私は*サポート*組み込みシステムに目指すライブラリが心配だけど、ではない:関連サポートデスクトッププラットフォームやそれに類するものの犠牲になる。 – JesseTG
ゲーム業界は、ヒープ割り当てによって引き起こされるパフォーマンスの低下について懸念しています。彼らはしばしば標準ライブラリの使用を避けます。そして、ここでは、参照カウントのための共有ポインタの1つの割り当てのような小さなオーバーヘッドについて説明しています。 – Alex