circular buffer

Üdvözlöm, Ön a circular buffer szó jelentését keresi. A DICTIOUS-ban nem csak a circular buffer szó összes szótári jelentését megtalálod, hanem megismerheted az etimológiáját, a jellemzőit és azt is, hogyan kell a circular buffer szót egyes és többes számban mondani. Minden, amit a circular buffer szóról tudni kell, itt található. A circular buffer szó meghatározása segít abban, hogy pontosabban és helyesebben fogalmazz, amikor beszélsz vagy írsz. Acircular buffer és más szavak definíciójának ismerete gazdagítja a szókincsedet, és több és jobb nyelvi forráshoz juttat.

Főnév

circular buffer (tsz. circular buffers)

  1. (informatika) A circular buffer (magyarul: körkörös puffer, gyűrűs puffer) egy fix méretű tömbként megvalósított FIFO (First-In, First-Out) adatstruktúra, ahol az elemek írása és olvasása körbe megy: ha elérjük a tömb végét, visszatérünk az elejére.



🧠 Alapgondolat

A circular buffer célja:

állandó idejű hozzáférés, hatékony memóriahasználat → különösen akkor, ha az adatmennyiség folyamatos, de korlátozott méretű (pl. szenzoradatok, hangfeldolgozás, hálózati pufferelés).


📦 Felépítés

A puffer egy fix méretű tömb:


  ↑         ↑
 write     read
  • write_index: ide írjuk az új elemet.
  • read_index: innen olvassuk a következő elemet.
  • Ha write_index eléri a végét → visszateker az elejére.



🔄 Működés

Írás (enqueue vagy push):

  • Beírjuk az adatot a write_index pozícióra.
  • Növeljük write_index-et: write_index = (write_index + 1) % capacity.

Olvasás (dequeue vagy pop):

  • Kiolvassuk az adatot a read_index pozícióról.
  • Növeljük read_index-et ugyanúgy.

Figyelni kell:

  • Overflow: ha a puffer megtelt, és új adatot írnánk → lehet:
    • Felülírja a régit (overwrite mode), vagy
    • Megtagadja az írást (blocking mode)



✅ Előnyök

Előny Miért jó?
Gyors O(1) írás és olvasás
🧠 Egyszerű Csak indexek mozognak
📏 Fix méretű Nincs új memóriafoglalás
🔁 Ciklikus Jó streaming, real-time adatokhoz



❌ Hátrányok

  • Nem skálázható dinamikusan (nem nő automatikusan)
  • Figyelni kell a telítettség és üresség különbségre



📊 Állapotok

write == read Állapot
Igen, és üres Üres
Igen, és nem olvastunk ki mindent Tele (túlcsordulás figyelendő!)
Nem Részlegesen telt

Gyakori trükk: a puffer mérete +1 legyen, és sose töltjük teljesen tele, így könnyen eldönthető, mikor üres vagy teli.



🧪 C++ példa

class CircularBuffer {
    vector<int> buffer;
    int head = 0, tail = 0, size = 0;
    int capacity;

public:
    CircularBuffer(int cap) : buffer(cap), capacity(cap) {}

    bool isEmpty() const { return size == 0; }
    bool isFull() const { return size == capacity; }

    void push(int val) {
        if (isFull()) throw overflow_error("Buffer full");
        buffer = val;
        tail = (tail + 1) % capacity;
        ++size;
    }

    int pop() {
        if (isEmpty()) throw underflow_error("Buffer empty");
        int val = buffer;
        head = (head + 1) % capacity;
        --size;
        return val;
    }
};

📂 Alkalmazások

  • Hangfeldolgozás (mikrofon → feldolgozó)
  • Hálózati adatfogadás
  • Valós idejű szenzoradatok
  • Producer-consumer probléma
  • FIFO hardverpufferek



✅ Összefoglalás

Tulajdonság Circular Buffer
Sorrendiség FIFO
Méret Fix
Ciklusos indexelés
Használat Streaming, valós idejű rendszerek
Komplexitás O(1) minden műveletre