2017-09-14 1 views
2

タイトルと同様に、任意のタイプの数値(浮動小数点数、整数、倍精度など)でcoutを実行すると、ヒープに7つのインデックスが割り当てられます。誰もがこの振る舞いの原因を知っていますか、それとも私のコード内の何か他の問題です。挙動を示す数値でcoutを実行すると、ヒープにメモリが割り当てられるのはなぜですか?

画像:それはC++標準ライブラリは、(特にバッファリング)内部目的のために動的メモリ割り当てを使用することができます

+3

coutのがオブジェクトです。初回使用時に遅延して初期化される可能性があります。 – StoryTeller

+3

おそらくあなたのシステムは数字だけを出力することをサポートしていないので、 'std :: cout'はあなたの数字をメモリを使うテキストバッファのテキストに変換する必要があります。 – nwp

+2

あなたの質問には外部リソースへのリンクを張ってはいけません。可能であれば、画像としてではなく、問題の* text * *として関連情報を投稿してください。 –

答えて

-1

と呼ばれていた後coutの前 は

と呼ばれています。おそらくあなたの標準C++ input/output libraryはダイナミックメモリを使用しています(これは非常に一般的です)。

(ちなみに、C++標準では、実装がコンピュータ上で実行するように指定しませんが、あなたの代わりに人間の奴隷の束を使用することがありますが、それは倫理的ではありません)

私はstd::coutが遅延し、いくつかのバッファを持っていることを推測します(これはオペレーティングシステム、C & C++標準ライブラリ、およびC++コンパイラ固有のものです)。

あなたのC++の実装では、C++のマントラはあなたが使っていないものを支払うことがないので、その遅延を割り当てるのが正しいです。つまり、標準のC++ I/Oを使用しない仮説的なC++プログラムは、あなたのプラットフォーム上でこれらのバイトを消費しません。

正確に何が起こっているのかを実際に理解するには、C++の実装(内部)に飛び込む必要があります。無料のソフトウェア標準のCおよびC++ライブラリであるC++コンパイラfree softwareを使用すると、フリーソフトウェアオペレーティングシステムが適切なソースコードに潜んでこれらの詳細を理解するのに役立ちます(いくつかのLinuxディストリビューションの使用を推奨します)。それ以外の場合は、C++実装のリバースエンジニアリングに何ヶ月か何年もの努力を費やしてください(一部の国ではおそらく違法かもしれません)。

しかし、あなたは気にしてはいけません(そして、貴重なNDAに署名することなく、あなたがおそらく勉強することを禁じられている独自のC++実装を悲しんでいるように見えます)。

std::coutをフラッシュしたり閉じたりすると、メモリーが解放される可能性があります(ただし、これは実装固有のものです)。

実際には、ほとんどのC++プログラムは多くのリソース(間接的にメモリなどを消費します)に依存しています。注目すべき例外は、C++の自立したサブセットをコーディングし、(間接的に)使用する必要のあるC++の部分を注意深く選択する埋め込み世界です。

(C++標準ライブラリの明らかにいくつかの部分は、Windows上でソース形式で提供されています。しかし、私は、Windowsを使用したことがない)

+0

このプラットフォームを使ってFOSSを説得するのはちょっと残念です。しかし、それは私のビジネスのどれでもありません。 – Mysticial

+4

「FOSS C++の実装では、独自のものよりも見やすいですか?それは客観的には真実です。 – cdhowie

+2

@cdhowie彼はそれ以上のことをしています。あなたは、ソースコードを参照する必要があります。しかし、答えに無関係である、率直に言って、「自由」な側面には過度の強調があります。 – Mysticial

関連する問題