Einzelnen Beitrag anzeigen

Namenloser

Registriert seit: 7. Jun 2006
Ort: Karlsruhe
3.724 Beiträge
 
FreePascal / Lazarus
 
#6

AW: FIFO-Array, gibt es soetwas?

  Alt 15. Mär 2013, 23:33
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.
  Mit Zitat antworten Zitat