カンパ〜イ!←最初の1杯目、なに頼む?

C言語を使用してるとバッファという言葉がよく出てきますがバッファとは何ですか
メモリとは違うものですか
訳をみても緩衝材とか一時的に蓄える場所という意味でよく分かりません
一時的でない使い方も多い気がしますが実際はどういうものですか

A 回答 (5件)

#1です



寝ぼけて適当に書いたので修正。

すぐ見つけることができたもので正確なものは英語版ですがこちらくらいかも。
Data buffer - Wikipedia (en.)
http://en.wikipedia.org/wiki/Data_buffer

一応簡単なものはこちらです。
バッファとは - e-Wrods
http://e-words.jp/w/E38390E38383E38395E382A1.html

「複数の機器やソフトウェアの間でデータをやり取りするときに、処理速度や転送速度の差を補うためにデータを一時的に保存しておく記憶装置や記憶領域のこと。」
が現在の基本定義です。処理速度・転送速度の差のための緩衝材的な意味です。

昔はソフトウェアとハードウェア間に使うデータでソフトウェア側がデータを受け取るか、整形して送信するときに使うメモリ領域が基本的にバッファでした。
マルチプロセッサ・マルチタスクの時代になってくると、ソフトウェア間の処理速度の違いを吸収するために使うメモリ領域にもバッファという言葉が使われるようになりました。ソフトウェア間で逐次(FIFO)処理されるデータのためのメモリ領域がこちらの使われ方の主戦場といったところでしょうか。

ソフトウェア間でただ一括転送されるデータならバッファという言葉は誤用ということになるのですが、よく誤用されます。
    • good
    • 1
この回答へのお礼

再度の回答ありがとうございます。

> ソフトウェア間でただ一括転送されるデータならバッファという言葉は誤用ということになるのですが、よく誤用されます。

これはありそうな気がします。
もしそうであれば、疑問が解決しそうです。
ありがとうございます。

お礼日時:2013/11/25 22:57

1バイト読み込み命令を出しても、HDDなどは1バイトだけ読むことは出来ません。


500ばいと、1000バイト単位です。

そこで、500バイト読んで1バイト渡したら残りの499バイトはメモリー上にいますが、
これをバッファと呼びます。

また、書き出しも、1バイト書いた段階では出力せず、500バイトなりたまった時点で書いています。
書き出しファイルにはクローズが必須ですが、クローズしたら残りのデータが書き込まれます。
クローズを忘れたら最後のデータが含まれないファイルになってしまいます。
    • good
    • 4
この回答へのお礼

回答ありがとうございます。

お礼日時:2013/11/25 22:58

一般的に、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で指すようにして、これらのライブラリを呼ぶ必要があります。この時、確保された領域は、普通、バッファ領域といいます。
    • good
    • 0
この回答へのお礼

回答ありがとうございます。

> これを使用するためには、呼び出し側(あなた)が、size*nmemdb のサイズの領域を確保して、ptrで指すようにして、これらのライブラリを呼ぶ必要があります。この時、確保された領域は、普通、バッファ領域といいます。

これのことをバッファ領域と呼ぶことに違和感があるのです。

お礼日時:2013/11/25 22:59

最終的な結果を得るまでの一時領域という事ではないでしょうか?


大きなデータを処理する場合、一つ一つを順番に見るより、まとめた大きな配列に放り込んで一気に処理した方が効率が上がる場合があります。
(バッファ領域が足りない(スワップアウトする)なら、効率が下がるかもしれませんが。)

また、逐一処理の場合でも、先に来たものから順に処理しなければならない(FIFO)場合、バッファ領域にためる、という事もあります。
(これはQueueと言った方が適切かもしれません。)
    • good
    • 0
この回答へのお礼

回答ありがとうございます。

> 最終的な結果を得るまでの一時領域という事ではないでしょうか?

そういう場合もあるかもしれません。
ただ、関数の引数でバッファと呼ばれるものがあるとなんか変な気もしますね。。。

お礼日時:2013/11/25 22:56

基本的には外部記憶装置上の情報をより応答速度の速い記憶装置にコピーしたとき、コピー後応答速度の速い記憶装置側の情報をバッファと呼びます。

緩衝材的に有用な効果があると言う意味で使われ始めたのだと思います。

でもコピーした複製になんでもかんでもバッファと付ける人は多いですよね。
    • good
    • 0
この回答へのお礼

回答ありがとうございます。

> 基本的には外部記憶装置上の情報をより応答速度の速い記憶装置にコピーしたとき、コピー後応答速度の速い記憶装置側の情報をバッファと呼びます。

そうですね。
これのことをバッファというものだと思っていましたが、

> でもコピーした複製になんでもかんでもバッファと付ける人は多いですよね。

こんなこともあるのですね。。。

お礼日時:2013/11/25 22:54

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています


おすすめ情報

このQ&Aを見た人がよく見るQ&A