Причина в том, что это кольцевой буфер. Предположим, что буфер имеет длину 8, вот две сцены A и B, где 4 элемента данных находятся в буфере, используя -
для обозначения несущественных данных и d
для обозначения буферизованных данных:
index 0 1 2 3 4 5 6 7
A data - d d d d - - -
begin end
B data d d - - - - d d
end begin
Так как, по определению кольцевого буфера, данные переносятся, голова может быть ниже хвоста, или хвост может быть ниже головы.
Посмотрите, что происходит с буфером B, когда его длина удваивается
index 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
B data d d - - - - d d - - - - - - - -
end begin
Теперь должно быть понятно, почему данные нужно перемещать, поэтому это так:
index 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
B data d d - - - - - - - - - - - - d d
end begin
с соответствующим указателем или указателем.
В качестве альтернативы данные могут быть скорректированы так:
index 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
B data - - - - - - d d d d - - - - - -
begin end