- ベストアンサー
バッファとは何ですか
C言語を使用してるとバッファという言葉がよく出てきますがバッファとは何ですか メモリとは違うものですか 訳をみても緩衝材とか一時的に蓄える場所という意味でよく分かりません 一時的でない使い方も多い気がしますが実際はどういうものですか
- みんなの回答 (5)
- 専門家の回答
質問者が選んだベストアンサー
#1です 寝ぼけて適当に書いたので修正。 すぐ見つけることができたもので正確なものは英語版ですがこちらくらいかも。 Data buffer - Wikipedia (en.) http://en.wikipedia.org/wiki/Data_buffer 一応簡単なものはこちらです。 バッファとは - e-Wrods http://e-words.jp/w/E38390E38383E38395E382A1.html 「複数の機器やソフトウェアの間でデータをやり取りするときに、処理速度や転送速度の差を補うためにデータを一時的に保存しておく記憶装置や記憶領域のこと。」 が現在の基本定義です。処理速度・転送速度の差のための緩衝材的な意味です。 昔はソフトウェアとハードウェア間に使うデータでソフトウェア側がデータを受け取るか、整形して送信するときに使うメモリ領域が基本的にバッファでした。 マルチプロセッサ・マルチタスクの時代になってくると、ソフトウェア間の処理速度の違いを吸収するために使うメモリ領域にもバッファという言葉が使われるようになりました。ソフトウェア間で逐次(FIFO)処理されるデータのためのメモリ領域がこちらの使われ方の主戦場といったところでしょうか。 ソフトウェア間でただ一括転送されるデータならバッファという言葉は誤用ということになるのですが、よく誤用されます。
その他の回答 (4)
- maiko0318
- ベストアンサー率21% (1483/6969)
1バイト読み込み命令を出しても、HDDなどは1バイトだけ読むことは出来ません。 500ばいと、1000バイト単位です。 そこで、500バイト読んで1バイト渡したら残りの499バイトはメモリー上にいますが、 これをバッファと呼びます。 また、書き出しも、1バイト書いた段階では出力せず、500バイトなりたまった時点で書いています。 書き出しファイルにはクローズが必須ですが、クローズしたら残りのデータが書き込まれます。 クローズを忘れたら最後のデータが含まれないファイルになってしまいます。
お礼
回答ありがとうございます。
一般的に、Cのプログラミングで使うのは、システムあるいは、ランタイムライブラリとの値の受け渡しに、使う領域のことが多いでしょう。 たとえば、Cライブラリのfread,fwrite は、以下の宣言ですが、 size_t fread(void *ptr, size_t size, size_t nmemb, FILE *stream); size_t fwrite(const void *ptr, size_t size, size_t nmemb, FILE *stream); これを使用するためには、呼び出し側(あなた)が、size*nmemdb のサイズの領域を確保して、ptrで指すようにして、これらのライブラリを呼ぶ必要があります。この時、確保された領域は、普通、バッファ領域といいます。
お礼
回答ありがとうございます。 > これを使用するためには、呼び出し側(あなた)が、size*nmemdb のサイズの領域を確保して、ptrで指すようにして、これらのライブラリを呼ぶ必要があります。この時、確保された領域は、普通、バッファ領域といいます。 これのことをバッファ領域と呼ぶことに違和感があるのです。
最終的な結果を得るまでの一時領域という事ではないでしょうか? 大きなデータを処理する場合、一つ一つを順番に見るより、まとめた大きな配列に放り込んで一気に処理した方が効率が上がる場合があります。 (バッファ領域が足りない(スワップアウトする)なら、効率が下がるかもしれませんが。) また、逐一処理の場合でも、先に来たものから順に処理しなければならない(FIFO)場合、バッファ領域にためる、という事もあります。 (これはQueueと言った方が適切かもしれません。)
お礼
回答ありがとうございます。 > 最終的な結果を得るまでの一時領域という事ではないでしょうか? そういう場合もあるかもしれません。 ただ、関数の引数でバッファと呼ばれるものがあるとなんか変な気もしますね。。。
- kanemoto_s
- ベストアンサー率45% (112/244)
基本的には外部記憶装置上の情報をより応答速度の速い記憶装置にコピーしたとき、コピー後応答速度の速い記憶装置側の情報をバッファと呼びます。緩衝材的に有用な効果があると言う意味で使われ始めたのだと思います。 でもコピーした複製になんでもかんでもバッファと付ける人は多いですよね。
お礼
回答ありがとうございます。 > 基本的には外部記憶装置上の情報をより応答速度の速い記憶装置にコピーしたとき、コピー後応答速度の速い記憶装置側の情報をバッファと呼びます。 そうですね。 これのことをバッファというものだと思っていましたが、 > でもコピーした複製になんでもかんでもバッファと付ける人は多いですよね。 こんなこともあるのですね。。。
お礼
再度の回答ありがとうございます。 > ソフトウェア間でただ一括転送されるデータならバッファという言葉は誤用ということになるのですが、よく誤用されます。 これはありそうな気がします。 もしそうであれば、疑問が解決しそうです。 ありがとうございます。