0 Tage Serie
cpp / expert
Snippet

Speicherisolation über Custom Allocator Traits

Eigene Allokatoren erlauben die Kontrolle darüber, wie STL-Container Speicher verwalten. Durch Definition eines Allokators und Übergabe als Template-Argument können Memory-Pools, Stack-basierte Allokation oder Logging implementiert werden, um spezialisierte Speicherbehandlung für Hochleistungssysteme sicherzustellen.

snippet.cpp
cpp
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
#include <memory>
#include <vector>
#include <iostream>
template <typename T>
struct StackAlloc {
using value_type = T;
T* allocate(std::size_t n) {
std::cout << "Allocating " << n << " items\n";
return static_cast<T*>(::operator new(n * sizeof(T)));
}
void deallocate(T* p, std::size_t n) {
std::cout << "Deallocating\n";
::operator delete(p);
}
};
int main() {
std::vector<int, StackAlloc<int>> v;
v.push_back(10);
}
Erklärung
1
struct StackAlloc
Ein minimaler Allokator, der den Anforderungen der C++ Standardbibliothek entspricht.
2
std::vector<int, StackAlloc<int>> v;
Injeziert die benutzerdefinierte Allokationslogik in den Standard-Vector-Container.