Hallo, On Wednesday 05 March 2003 21:37, Michael Matz wrote:
Hi,
On Wed, 5 Mar 2003, Sebastian Huber wrote:
Ist das nicht ein bischen viel Overhead fuer eine bequemere Syntax und geringfuegig schnellere Indexberechnung? Hier habe ich ja 'L*M*N*sizeof(T)' Speicher fuer die Daten plus 'L*M*sizeof(void*)' Speicher fuer die Zeiger.
Kommt eben drauf an. Wenn man ehh alle Elemente braucht, und die Multiplikationen schneller als Speicherzugriffe sind (je nach Zugriffspattern kommen die aus dem Cache), dann kann eine flache Implementierung (also das 3D- auf ein 1D-Array gemappt) schneller sein.
Also wenn man alle Elemente bearbeiten will, dann kommt man auch mit
Additionen aus, im Gegensatz zu Inkrementen, z.B.:
for (i=0;i Wenn man aber nur einige Elemente braucht, oder das Ding resizen koennen
will, dann ist die dynamische Variante eher geeignet. Die Indizierung ist sicherlich schwieriger, aber bei niedriger dimensionalen
"Unterraeumen" nicht wesentlich ineffizienter (Addition contra einfaches
Inkrement).
Ein Resize fuehrt halt zu massiven Kopieraktionen, aber fuer haeufige Resizes
ist ein Array eh praktikabel.
Ciao