Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!
Werbeanzeige
C-/C++-Quelltext |
|
1 |
boost::multi_array<double, 3> A(boost::extents[3][4][2]); |
C-/C++-Quelltext |
|
1 |
multi_array<double, 3, 4, 2> A; |
Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von »LukasBanana« (21.09.2014, 16:29)
Da es sich im eigentlichen um eine einzige Datei handelt (header-only) wäre eine Datei basierende Lizenz wohl etwas mehr angebracht, z.B. MPL 2.(Öffentlich zugänglich unter der LGPLv3).
In wiefern gibt es da einen oder eben keinen Overhead?boost::multi_array gegenüber den ANSI-C multi-arrays keinen Overhead (in Speicherbedarf und Zugriffszeiten).
Administrator
Da das Ganze ein Container ist, wäre es wohl noch interessant ein paar Angaben (Speicherzugriffe, Speicherbedarf, etc.) in der O-Notation zu haben.
Mir ist schon bewusst wie es in der Theorie funktioniert, aber ob es nun auch wirklich so implementiert wurde, ist die andere Frage. Hatte jetzt nicht das Interesse den Code zu analysieren insbesondere mit all den tollen Templates Sachen.Der Speicherbedarf ist offensichtlich genau wie bei normalen Arrays.
Um die Adresse eines Elements im N-dimensionalen Array zu bestimmen, braucht man N-1 Multiplikationen und N-1 Additionen.
Die kann man jedoch gegenüber dem eigentlichen Speicherzugriff vernachlässigen.
Da es sich im eigentlichen um eine einzige Datei handelt (header-only) wäre eine Datei basierende Lizenz wohl etwas mehr angebracht, z.B. MPL 2.
Zitat von »eXpl0it3r«
In wiefern gibt es da einen oder eben keinen Overhead?
C-/C++-Quelltext |
|
1 |
std::array<std::array<std::array<double, 2>, 4>, 3> A; |
C-/C++-Quelltext |
|
1 |
multi_array<double, 3, 4, 2> A; |
d.h. sie kann mit "std::sort", for-each Schleifen etc. benutzt werden
Administrator
In aktuellen Compilern kann der Overhead, der dabei entsteht, aber vermutlich nahezu komplett weg optimiert werden (also das Erzeugen der Temporären "slice" Instanzen).
Dieser Beitrag wurde bereits 3 mal editiert, zuletzt von »Spiele Programmierer« (04.07.2014, 13:14)
Hatte ich zuerst auch gedacht, hab dann aber mal Google gefragt (stell dir vor gewisse Leute machen das noch!) und es scheint okay zu sein.LGPL sollte eigentlich doch die komplette Verwendung einer solchen Lib verbieten. (Außer man verwendet selbst LGPL) Schließlich verbietet LGPL unteranderem statisches Linken, weil damit die Lib mit dem Programm verbunden werden und damit das Programm ein abgeleitetes Werk ist, oder so. Da die Bibliothek nur aus einem Header besteht, werden automatisch alle Datenstrukturen und Algorithmen direkt in die Binary hinein gelinkt und es müsste das doch ebenfalls die Bedingungen der LGPL fallen, so das man seine Anwendung mit Quellcode veröffentlichen muss? Das wären meine Gedanken. Kann auch sein das ich falsch liege.
Werbeanzeige