浅談C++バッファの使用
バッファ
バッファはメモリ空間の一部です。メモリ内ではデータストリームごとにメモリバッファを開きます。
バッファエリアはストリーム中のデータを格納するためのもので、バッファエリアのデータはストリームです。C++の中で、入出力ストリームはクラスと定義されています。C++のI/Oライブラリのクラスはストリームタイプと言います。coutとcinはiostreamストリーム類の流れの対象です。
なぜバッファを導入したのですか?
なぜ私たちは緩衝区を導入しますか?
例えば、私達はディスクから情報を取って、先に読み出したデータをバッファエリアに置いて、コンピュータは直接バッファエリアからデータを取って、バッファエリアのデータを取ってからディスクに行って読み込むと、ディスクの読み書き回数を減らすことができます。また、コンピュータのバッファエリアへの操作もディスクの操作より速くなります。このため、バッファを使うとコンピュータの運転速度が大幅に向上します。
また、例えば、私たちはプリンタでドキュメントを印刷します。プリンタの印刷速度が比較的遅いので、まずドキュメントをプリンタの対応するバッファに出力して、プリンタは自分で逐次印刷します。この時、CPUは他のことを処理できます。
大体分かりましたよね。バッファはメモリエリアです。入出力デバイスとCPUの間でデータをキャッシュするために使います。低速の入出力装置と高速のCPUを協調して動作させ、低速の入出力装置がCPUを占有し、CPUを解放して効率よく動作させることができます。
バッファの種類
バッファは3つのタイプに区分されます。全バッファ、行バッファ、バンドバッファはありません。
1、全バッファ
この場合、標準I/Oキャッシュを満たしてから実際のI/O操作を行います。フルバッファの典型的な代表はディスクファイルの読み書きです。
2、行バッファ
この場合、入力と出力で改行があった場合は、本当のI/O動作を行います。この時、入力した文字はバッファに預けて、リターンキーを押して改行する時に実際のI/O操作を行います。典型的な代表はキーボード入力データです。
3、バッファなし
つまり、バッファを行わずに、標準エラーの場合はstderが代表的であり、これによりエラー情報が直接に早く表示されるようになります。
バッファの更新
下記の状況はバッファの更新を引き起こします。
1、バッファが満杯の場合;
2、flush文を実行する。
3、endl文を実行する。
4、ファイルを閉じます。
例
1
1
2
2
3
3
4
4
5
5
一つを入力して、すぐに出力します。毎回キーボードで入力してください。
一括入力:
1 2 3 4 5
1
2
3
4
5
循環は整数しかないですが、入力バッファには一回に5つの整数が入っています。
ここで、浅いC++バッファーの使用についての文章を紹介します。C++バッファーの関連内容は以前の文章を検索したり、下記の関連記事を見たりしてください。これからも応援してください。
バッファはメモリ空間の一部です。メモリ内ではデータストリームごとにメモリバッファを開きます。
バッファエリアはストリーム中のデータを格納するためのもので、バッファエリアのデータはストリームです。C++の中で、入出力ストリームはクラスと定義されています。C++のI/Oライブラリのクラスはストリームタイプと言います。coutとcinはiostreamストリーム類の流れの対象です。
なぜバッファを導入したのですか?
なぜ私たちは緩衝区を導入しますか?
例えば、私達はディスクから情報を取って、先に読み出したデータをバッファエリアに置いて、コンピュータは直接バッファエリアからデータを取って、バッファエリアのデータを取ってからディスクに行って読み込むと、ディスクの読み書き回数を減らすことができます。また、コンピュータのバッファエリアへの操作もディスクの操作より速くなります。このため、バッファを使うとコンピュータの運転速度が大幅に向上します。
また、例えば、私たちはプリンタでドキュメントを印刷します。プリンタの印刷速度が比較的遅いので、まずドキュメントをプリンタの対応するバッファに出力して、プリンタは自分で逐次印刷します。この時、CPUは他のことを処理できます。
大体分かりましたよね。バッファはメモリエリアです。入出力デバイスとCPUの間でデータをキャッシュするために使います。低速の入出力装置と高速のCPUを協調して動作させ、低速の入出力装置がCPUを占有し、CPUを解放して効率よく動作させることができます。
バッファの種類
バッファは3つのタイプに区分されます。全バッファ、行バッファ、バンドバッファはありません。
1、全バッファ
この場合、標準I/Oキャッシュを満たしてから実際のI/O操作を行います。フルバッファの典型的な代表はディスクファイルの読み書きです。
2、行バッファ
この場合、入力と出力で改行があった場合は、本当のI/O動作を行います。この時、入力した文字はバッファに預けて、リターンキーを押して改行する時に実際のI/O操作を行います。典型的な代表はキーボード入力データです。
3、バッファなし
つまり、バッファを行わずに、標準エラーの場合はstderが代表的であり、これによりエラー情報が直接に早く表示されるようになります。
バッファの更新
下記の状況はバッファの更新を引き起こします。
1、バッファが満杯の場合;
2、flush文を実行する。
3、endl文を実行する。
4、ファイルを閉じます。
例
#include <iostream>
using namespace std;
int main() {
int n[5];
for (int i = 0; i < 5; ++i) {
cin >> n[i];
cout << n[i] << endl;
}
return 0;
}
一つの入力:1
1
2
2
3
3
4
4
5
5
一つを入力して、すぐに出力します。毎回キーボードで入力してください。
一括入力:
1 2 3 4 5
1
2
3
4
5
循環は整数しかないですが、入力バッファには一回に5つの整数が入っています。
ここで、浅いC++バッファーの使用についての文章を紹介します。C++バッファーの関連内容は以前の文章を検索したり、下記の関連記事を見たりしてください。これからも応援してください。