Wenn es wichtig ist, dass alles in einem Block direkt hintereinander im Speicher liegt (bei Ringbuffer nicht gegeben), fiele mir folgendes ein:
Code:
Anfangszustand (FIFO-Array mit Länge 4):
Äußerer Puffer: |[1][2][3][4][ ][ ][ ][ ][ ][ ][ ][ ]|
FIFO-Array: [1][2][3][4]
5 wird hinten ans FIFO-Array angefügt:
Äußerer Puffer: |[1][2][3][4][5][ ][ ][ ][ ][ ][ ][ ]|
FIFO-Array: [2][3][4][5]
6 wird hinten ans FIFO-Array angefügt:
Äußerer Puffer: |[1][2][3][4][5][6][ ][ ][ ][ ][ ][ ]|
FIFO-Array: [3][4][5][6]
...
12 wird hinten ans FIFO-Array angefügt:
Äußerer Puffer: |[1][2][3][4][5][6][7][8][9][10][11][12]|
FIFO-Array: [9][10][11][12]
Wenn jetzt noch was angefügt wird, dann müssen wir zuerst
einmalig die hintersten vier Stellen nach vorne kopieren:
Äußerer Puffer: |[9][10][11][12][5][6][7][8][9][10][11][12]|
FIFO-Array: [9][10][11][12]
13 wird hinten ans FIFO-Array angefügt:
Äußerer Puffer: |[9][10][11][12][13][6][7][8][9][10][11][12]|
FIFO-Array: [10][11][12][13]
...
Das reduziert die Anzahl der Kopiervorgänge, wenn der äußere Buffer entsprechend groß ist, erheblich.