Skip to content

Latest commit

 

History

History
65 lines (41 loc) · 1.89 KB

File metadata and controls

65 lines (41 loc) · 1.89 KB

循环缓冲区

循环缓冲区,或环形缓冲区是一种数据结构,它使用单个固定大小的缓冲区,就好像它是端到端连接一样。

循环缓冲区首先开始为空,并具有一些预定义的长度。例如,这是一个 7 元素的缓冲区:

[ ][ ][ ][ ][ ][ ][ ]

假设 1 被写入缓冲区的中间(其实精确的起始位置在循环缓冲区中无关紧要):

[ ][ ][ ][1][ ][ ][ ]

然后假设添加了另外两个元素 - 2 和 3 - 在 1 之后,附加:

[ ][ ][ ][1][2][3][ ]

如果从缓冲区中,删除了两个元素,则删除缓冲区内最旧的值。在这种情况下,删除的两个元素是 1 和 2,缓冲区只有 3:

[ ][ ][ ][ ][ ][3][ ]

如果缓冲区有 7 个元素,那么它就完全填满了:

[6][7][8][9][3][4][5]

当缓冲区已满时,将引发错误,警告客户端,进一步写入被阻止,直到插槽空闲为止。

当缓冲区已满时,客户端可以选择使用强制写入,覆盖最旧的数据。在这种情况下,添加了另外两个元素 - A 和 B - 它们会覆盖 3 和 4:

[6][7][8][9][A][B][5]

3 和 4 已被 A 和 B 取代,使得 5 现在是缓冲区中最旧的数据。最后,如果删除了两个元素,那么返回的是 5 和 6,和剩余的缓冲区:


[ ][7][8][9][A][B][ ]

因为有可用的空间,但如果客户端再次覆盖存储 C 和 D,那么先前存储 5 和 6 的空间将被使用,而不是 7 和 8 的位置。7 仍然是最旧的元素,缓冲区又是充分.

[D][7][8][9][A][B][C]

资源

维基百科http://en.wikipedia.org/wiki/Circular_Buffer