001
25.05.2007, 02:31 Uhr
0xdeadbeef
Gott (Operator)
|
std::vector verwaltet die Daten in einem zusammenhängenden Speicherbereich. Das heißt, solange die Vektorlänge die Cachegröße nicht übersteigt, kann ein vielbenutzter Vektor leicht im Cache vorgehalten werden. Bei Listen ist das nicht der Fall, weil jedes Element in einem völlig anderen Speicherbereich liegt und vom Kernel einzeln betrachtet wird - das heißt, lediglich oft referenzierte Elemente werden im Cache gehalten, und das bringt dir auch nur dann was, wenn du dir die Iteratoren merkst.
Prinzipiell ist die Entscheidung, ob man Vektoren oder Listen benutzen sollte, aber vom use case abhängig. Bei großen Containern greift das Cache-Argument generell nur so halb, und wenn du zum Beispiel oft Elemente in die Mitte des Vektors/der Liste einfügen musst, ist ein Vektor denkbar ungeeignet.
Im Zweifel empfiehtl sich, nen Profiler anzuschmeißen und zu kucken, was der sagt. -- Einfachheit ist Voraussetzung für Zuverlässigkeit. -- Edsger Wybe Dijkstra |