boost :: variant scheint ein mächtiger Container zu sein, um eine heterogene Menge von Typen zu manipulieren. Ich frage mich, was es kostet. Im Speicher denke ich, dass es die Größe des größten Typs und eine Ganzzahl, die() repräsentiert, einnimmt. Für apply_visitor(), denke ich, ist seine Leistung sehr gut, es kann direkt die Funktion anders als viele Wenns aufrufen. Sind meine Punkte richtig?Was ist boost :: variant speicher und leistung kosten?
Antwort
Sie haben fast Recht.
Die Größe boost::variant
ist die maximale Größe eines Elements ist, gerundet für die größte Ausrichtung plus die Größe einiger ganze Zahl ist, und wieder aufgerundet wird je nach Bedarf auf.
Denken Sie an einer Variante dieser Art ist den Tag unter der Annahme uint32_t
:
struct foo { uint32_t value[3]; }; // size 12, align 4
struct bar { uint64_t v2; }; // size 8, align 8
Eine nicht markierte Vereinigung 16 Größen haben muß, richten 8; die 4-Byte-Tag hinzufügen müssen eine Variante gehen bis zu der Größe 24 zu halten align 8.
Oder betrachten:
struct foo { uint8_t value[5]; }; // size 5, align 1
struct bar { uint16_t v2; }; // size 2, align 2
Eine nicht markierte Vereinigung von ihnen haben müssen Größe 6, ausrichten 2; Hinzufügen der 4-Byte-Tag zwingt Sie zu Größe 12, align 4.
Für den Aufruf, ich erwarte es eine Array-of-Funktionen Lookup (das ist, wie ich meine eigene Variante implementiert, die Boost war nicht notwendig Unterstützung von Move Constructors), da, wenn Ketten nicht gut funktionieren und Switches unmöglich sind.
- 1. boost :: variant und Funktionsüberladungsauflösung
- 2. boost :: variant Konvertierung eingeben
- 3. autoeventwireup Leistung Kosten
- 4. Was ist aktiver Speicher und inaktiver Speicher?
- 5. C++ Speicher virtuelle Funktionstabelle kosten
- 6. Boost Variant im Wesentlichen eine Union in C/C++?
- 7. Was ist die grobe "Kosten" eines Threads in CPU-Zyklen und Speicher?
- 8. Boost-Tupel-Leistung
- 9. Boost ggplot2 Leistung
- 10. Leistung von Boost Python
- 11. Leistung von Python die Kosten wert?
- 12. Wie mache ich eine vereinfachte Version von boost :: variant?
- 13. Boost Geist schlechte Leistung mit Alternative Parser
- 14. Boost Asio single-threaded Leistung
- 15. boost :: variant - warum wird "const char *" in "bool" umgewandelt?
- 16. boost :: variant Besucherrückgabe Fehler (am meisten ärgerlichen Parse?)
- 17. Calling Methoden gemeinsamen Typen in einem boost :: variant
- 18. C++ Boost große Anzahl Speicher
- 19. Was ist die Leistung von boost :: interprocess_mutex vs Win32 native Mutexe?
- 20. Mysql Leistung mit wenig Speicher
- 21. Was ist ARM TCM-Speicher
- 22. Variant Typ in C#
- 23. Boost.Variant Vs Virtual Interface Leistung
- 24. Struts/JSP/J2EE Leistung und Speicher Profiling und Probleme
- 25. Was ist die Knotenstruktur der Boost-Liste?
- 26. boost streambuf konsumieren und commit, was ist das
- 27. Was ist der Unterschied zwischen Boost Smartpointern und Std Smartpointern?
- 28. Reguläre Ausdrücke Leistung: Boost vs Perl
- 29. Gibt es eine Leistung Kosten Autobox ein primitives Literal?
- 30. Was ist die Kosten/Komplexität eines String.IndexOf() Funktionsaufruf
Boost ist opensource. Sie könnten ein wenig recherchieren und den Quellcode durchsuchen. Es sieht so aus, als wüsstest du schon, wonach du suchen sollst. – Drop
'apply_visitor' macht" viele ifs "unter der Haube (in der Tat ist es eher wie ein (großer, metaprogrammierter) Schalter auf der Art (' which() ') der Variante. Offensichtlich ist das einfach die minimal erforderliche Arbeit.) – sehe