cpp / expert
Snippet
Statisch allozierter Ringpuffer für eingebettete Systeme
Ein Ringpuffer auf Basis eines Arrays fester Größe ist für Echtzeitsysteme unerlässlich, um dynamische Speicherallokation zu vermeiden. Durch die Verwendung eines statischen Arrays und Modulo-basierter Indexierung bietet diese Implementierung eine O(1) Zeitkomplexität für Einfügen und Entfernen bei gleichzeitigem Verzicht auf Allokationen.
snippet.cpp
cpp
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
template<typename T, size_t Capacity>class CircularBuffer {T storage[Capacity];size_t head = 0;size_t tail = 0;bool full = false;public:void push(T item) {storage[head] = item;if (full) tail = (tail + 1) % Capacity;head = (head + 1) % Capacity;full = head == tail;}T pop() {if (head == tail && !full) return T{};T item = storage[tail];full = false;tail = (tail + 1) % Capacity;return item;}};
Erklärung
1
T storage[Capacity];
Der zur Kompilierzeit allozierte, zusammenhängende Speicherblock.
2
(head + 1) % Capacity
Der Modulo-Operator setzt den Index an den Anfang des Arrays zurück.