2016-04-19 13 views
1

Ich bemerkte, dass andere Studenten gerne viele Arrays für Elemente verwenden, die eigentlich Felder eines Objekts sein sollten.Ist der Zugriff auf ein Feld aus mehreren Strukturen langsamer als auf Elemente eines Arrays/Vektors?

Ist dies, weil es schneller ist, auf ein Element von einem Array zu einem Feld von einer Struktur zuzugreifen?

Zum Beispiel sagen, dass ich für ein Objekt als ...

1) An array of 5 ints 
2) As a field in 5 structures 

Und ich dann diese Elemente min/max zugreifen müssen finden gespeichert Taktzyklen haben.

Ich mag die Idee, die Eigenschaften einiger Objekte zusammen zu halten, anstatt mehrere Arrays für das zu haben, was natürlich als Feld hätte passen können. Ich bin mir nur nicht sicher, ob ich schreibe, was als schlechte Programmiergewohnheiten gelten würde, indem ich es als ein Feld in einer Struktur behandle.

+1

Zuerst machen Sie es richtig. Dann mach es lesbar. Dann mach es schnell (wenn es nötig ist). –

Antwort

5

Vielleicht nicht mit 5 Elementen - aber mit Tausenden von Elementen könnte es einen Unterschied geben.

Das universelle Prinzip des Caching ist Locality of reference - es ist besser, Sachen zusammen zu speichern. Wenn Sie wissen, dass Ihr Programm nur auf ein (oder ein paar) Feld Ihrer Strukturen zugreifen wird, ist es besser, dieses Feld in ein dediziertes Array zu verschieben. Wenn Ihr Programm auf alle (oder die meisten) Felder Ihrer Strukturen zugreift, ist es besser, die Strukturen selbst in einem Array zu halten.

Wie alles in Bezug auf die Leistung, das reale Verhalten ist jedoch häufig überraschend, und Sie müssen in der Regel einen Weg der Implementierung zu messen, dann den anderen, und wählen Sie die beste.


Wenn Ihre Anwendung keine Leistungsoptimierung erfordert, verwenden Sie einfach den am besten lesbaren Code. Es kann Ihre "Taktzyklen" als Feld in einem struct oder als ein Array zuordnen - welcher Weg besser lesbar ist, hängt von Ihrer Anwendung ab. Und manchmal sogar auf welchen Aspekt der Anwendung Sie gerade entwickeln.

+0

Sicher, mit Tausenden oder Millionen von Elementen dort kann es sehr wohl einen Unterschied geben. Aber man sollte immer messen. Und die Frage hat nur 5 Elemente explizit angegeben. –

1

Ich bezweifle sehr, dass es wichtig ist - leistungsfähig - in irgendeiner messbaren Weise.

Aber im Zweifelsfall, warum benchst du es nicht?