2012-04-23 8 views
7

、私はそのようなstd::cout使用しています:std :: coutはスタック上で完全に動作していますか? C++で

std::cout << "myString" << std::endl; 

はSTD :: coutのでヒープに割り当てられます何がありますか?または、std :: coutはスタック(std :: coutとその基礎となる関数はnew/malloc/etc...を実行しません)ですべてを行いますか?

私は重くSTDを使用しているかどうかを知りたい:: coutでは、あなたのコードは、ヒープ上の任意の直接の割り当てを引き起こしていません。この具体例では、いくつかのヒープの断片

+3

'operator <<(std :: ostream&、T)'が 'new'を呼び出さないという保証はありません。これは、ユーザが定義した 'T'でも当てはまります。 –

+1

なぜヒープの断片化が心配ですか?これを大きな懸念事項としている何か他のことはありますか? –

+1

@LokiAstari私はちょうど好奇心からそれを求めています。 – Mesop

答えて

7

を引き起こす可能性があります。しかし、どのメソッドの実装でも、その一部の作業にヒープを使用することは可能です。メソッドの実装がそれ自身の後で適切にクリーンアップされる限り、これは完全に問題ありません。

このロジックは、operator<<(std::ostream&, T)などのメソッドに適用されます。

+0

したがって、stlの実装に依存します。メモリが 'std :: cout'によってどのように扱われるべきかを指定するものはありませんか? – Mesop

+3

@olchauvinこれは 'stl'の実装と与えられた' T'の 'operator <<'の実装に依存します。私は 'cout'の実装がどのようにメモリを管理しているかについて利用可能な仕様はないと考えています。 – JaredPar

5

これは基本的なC++ライブラリの特定の実装に完全に依存します

関連する問題