0

私は c++ の初心者で、Andrew Koenig と Barbara E. Moo による Accelerated C++ を通じて学習しています。

本にあるように、C++ のバッファの概念を理解することができません。各出力要求に対して、ライブラリは、書き込まれる文字を蓄積するためにバッファを使用し、必要な場合にのみその内容を出力デバイスに書き込むことにより、バッファをフラッシュします. そうすることで、複数の出力操作を単一の書き込みに組み合わせることができます. ."

ほとんどのシステムで、文字を出力デバイスに書き込むのにかなりの時間がかかるのはなぜですか? このバッファとは何ですか?また、なぜ必要なのですか?なぜフラッシュ バッファが必要なのですか?

4

7 に答える 7

3

システムの I/O 操作にかなりの時間がかかる原因はいくつかあります。たとえば、デバイスが遅い (ハード ディスク ドライブ)、デバイスへの書き込みの前後にさまざまな操作を実行する必要があるなどです。

次に、バッファーはデバイスとのやり取りの回数を減らしますが、読み取り/書き込みの頻度を減らします。次に、操作を実行するために必要なオーバーヘッドが削減されます (ハード ドライブの場合、書き込む場所を見つけるのにコストがかかるため、小さなチャンクを頻繁に書き込むのではなく、大きなチャンクのデータを頻繁に書き込む必要はありません)。 .

さらに、バッファを使用すると、I/O 操作をいつ実行するかを制御することもできます。これは、特定の場合に興味深い場合があります (たとえば、リアルタイム アプリケーションでは、I/O 操作を避けたい場合があります)。コードの時間制約のある部分を実行し、データをバッファーに格納し、コードの時間制約のある部分を終了した後にのみ I/O 操作を実行します)。

于 2013-05-15T09:09:49.320 に答える
1

たとえば、出力デバイスはハードディスクである可能性があり、ハードディスクへの書き込みには、書き込みヘッドを動かして、プラッターが適切な場所に回転するのを待つ必要がありました。ファイルに書き込むすべての文字に対してこれを行うと、非常に遅くなります。

バッファは、書き込み準備ができている文字のキューです。キューに十分な文字がある場合、それらはすべて 1 回の操作でまとめて書き込まれます。

于 2013-05-15T09:05:13.163 に答える
1

一部のデバイスは遅いため、一度に 1 文字ずつ書き込むのは効率的ではありません。デバイスに書き込む効率的な方法は、一度に大量のデータを書き込むことです。そのため、バッファーはより多くの文字を蓄積し、それらすべてを 1 回の書き込み操作で書き込むために使用されます。

于 2013-05-15T09:08:59.823 に答える
0

HDDを出力デバイスと考えてみましょう。HDD への書き込みは、RAM に比べて非常に遅いです。HDD に大量のデータを一度に書き込む方が、小さなチャンクを多数書き込むよりもはるかに高速です。バッファは、これらのチャンクを蓄積するために使用されます。たとえば、合計 1 MB のデータを書き込むように要求されるまで待機する場合があります。その後、バッファーはディスクにフラッシュ (書き込み) されます。したがって、バッファは単なるストレージです

于 2013-05-15T09:05:12.937 に答える
0

私は本や引用に慣れていないので、これはあなたの正確なポイントに答えないかもしれません.

本質的に、コンピューターは非常に高速です。その場所で電子を動かしたり、計算を実行したり、その他のことを実行したりするのは非常に高速です。対照的に、入力/出力デバイスははるかに低速です-ディスクは、表面の正しい部分を読み書きできるように回転する必要があり、画面が正しい部分を正しい色で光らせるには時間がかかります.

ただし、出力デバイスへの書き込みのオーバーヘッドの多くは、最初の文字 (またはバイトなど) の書き込みに費やされており、さらにいくつかの書き込みを行う追加のオーバーヘッドはほとんどありません。ディスクが最初のバイトの正しい位置にあると、次などのほぼ適切な場所に。人々は実際には一度に 1 文字ずつ画面を読むわけではなく、単語や文全体を読む傾向があるため、画面の最初の文字をすばやく取得することは心配する価値がありません。

したがって、多くのバイト、文字、またはその他のものをまとめて、一度に書き込むことは理にかなっています。このプロセスはバッファリングと呼ばれ、データが収集されるメモリ領域はバッファと呼ばれます。

バッファ内のデータをデバイスに書き込むことは、バッファのフラッシュと呼ばれます。

于 2013-05-15T09:12:00.257 に答える
0

ほとんどのシステムで、文字を出力デバイスに書き込むのにかなりの時間がかかるのはなぜですか?

一般的なコンピュータの場合、一般的な出力デバイスへの書き込みは、内部の揮発性メモリへの書き込みよりも時間がかかります。

このバッファーとは何ですか? なぜ必要なのですか?

バッファは、別の場所に移動されるデータの一時的なストレージです。

バッファのフラッシュが必要なのはなぜですか?

これは、上記のリンクで説明されているバッファの機能です。

于 2013-05-15T09:09:06.120 に答える