バッファー
読み:バッファー
外語:buffer
緩衝領域、クッション領域。
概要
プログラムで処理を行なう際、データを一時的に格納するためのメモリー領域をいう。
例えば、実際の処理の前に、処理に都合の良いようにデータを加工して保管して置く場所として用いたり、他の処理とデータのやり取りをする際、お互いのデータを格納するための領域として用いたりする。
特徴
確保場所
バッファーをどこに確保するかは、様々な手法がある。
- 決まったアドレスに確保する方式
- スタックに確保する方式
- ヒープに確保する方式
アセンブリ言語などでは決まったアドレスにサイズを確保して扱う簡易な方法がよく使われる。CやC++などでもstaticなグローバル変数は同様の扱いとなる実装が多いようである。
CやC++では、関数内でautoで確保した変数はスタックに領域が確保される。CのmallocやC++のnewを用いて確保したものはヒープに領域が確保されている。
管理方法
バッファーの管理方法には、主に次のような方法が使われる。
データ通信の場合は、送信バッファーや受信バッファーなどとしてバッファーを用い、この管理にはよくリングバッファーが用いられる。
あふれ
リングバッファーを用いない処理の場合、想定以上のサイズのデータを受信した場合にはバッファーが溢れることがある。このとき、プログラムの格納されたメモリー領域があふれた不正なデータで上書きされてしまうことがある。
これはバッファーオーバーフローと呼ばれるバッファー管理プログラムのバグであるが、ありがちなバグであり、古くからプログラマーを苦しめた。
これを悪用すると通信のデータ中に破壊プログラムなどを混入させ、それを受信した端末のデータ等を故意に破壊する事も可能となる。
再検索