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.