2010-07-25 9 views
8

I Liste Klasse in c bin mit ++ und ich weiß nicht, was bedeutet allocator hierwas in STL bedeutet allocator

template < class T, class Allocator = allocator<T> > class list; 

wenn ich list <int> mylist hätte es Integer-Typ von Speicher mit der allocator bedeuten zuteilen wenn ein Element zur Liste hinzugefügt wird? und wann möchten Sie einen benutzerdefinierten Zuordner?

Antwort

11

Ja. Ein allocator ist eine Möglichkeit, die Zuweisung von Speicher aus der Verwendung von Speicher zu berücksichtigen. Wenn ein Container etwas Speicher benötigt, statt:

// too rigid, cannot allow custom allocation schemes 
void* mem = ::operator new(someAmount); 

Sie erhalten:

// flexible, allows custom allocation schemes 
void* mem = myallocator.allocate(someAmount); 

Es ist ein Standard-Allocator, std::allocator, die globale operator new und operator delete verwendet.

Sie möchten Ihren eigenen Zuweiser jederzeit verwenden, wenn Sie ihn in einer bestimmten Weise zuordnen müssen. Diese Fälle können sein: Speicher von einer Freelist abholen, vom Stack zuweisen, usw. (Im Allgemeinen zu Optimierungszwecken, obwohl Sie auch Statistiken mit einem benutzerdefinierten Zuordner aufzeichnen könnten). Der Standardzuordner funktioniert meistens perfekt.

2

Zusätzlich zu dem, worauf GMan hingewiesen hat, können benutzerdefinierte Zuordner für die ausgerichtete Speicherzuweisung verwendet werden. Einige Hochleistungsbibliotheken, die den SIMD-Befehlssatz verwenden, erfordern einen ausgerichteten Speicher. Diese Bibliotheken können Ihnen einsatzbereite Zuweiser zur Verfügung stellen, die Sie in jeden STL-Container einstecken können. Es gibt auch Cache-ausgerichtete Zuordnungen, um eine falsche Freigabe in Multithread-Code zu vermeiden. Intels TBB ist mit skalierbaren Allokatoren ausgestattet, die die Multi-Threading-Speicherzuweisung beschleunigen.