boost :: variant, heterojen bir tür kümesini işlemek için güçlü bir kapsayıcı gibi görünüyor. Onun maliyetini merak ediyorum. Bellekte, en büyük türün boyutunu artıran bir tam sayıyı (b) temsil ettiğini düşünüyorum. Apply_visitor() için, performansının çok iyi olduğunu düşünüyorum, doğrudan birçok ifs dışındaki işlevi çağırabilir. Puanlarım doğru mu?Destek nedir? Değişken bellek ve performans maliyeti nedir?
9
A
cevap
11
Haklısınız. en hizalama, artı bir miktar tamsayı boyutu için gerekli ve tekrar yuvarlanır
boost::variant
boyutu olan herhangi bir elemanın maksimum boyutu, yuvarlanır.
etiketi varsayarak uint32_t
olduğunu bu tür bir varyantı düşünün: Bir etiketsiz birlik, boyut 16 olması 8 hizaya gerekir
struct foo { uint32_t value[3]; }; // size 12, align 4
struct bar { uint64_t v2; }; // size 8, align 8
; 4 baytlık etiketi ekleyerek hizalayın 8.
tutmak Veya bir varyantını dikkate büyüklüğü 24 kadar gitmek gerekir: 2 hizaya bunlardan bir etiketsiz birliği boyutu 6 olması gerekir
struct foo { uint8_t value[5]; }; // size 5, align 1
struct bar { uint16_t v2; }; // size 2, align 2
; 4 baytlık etiketi eklediğinizde, boyutu 12'ye hizalarsınız, 4 hizalayın.
Arama için bir işlev dizisi araması kullanmasını beklerim (bu, kendi varyantımı nasıl uygulayacağımı gösterir. zincirleri iyi yapmazlarsa ve anahtarlar imkansızsa, destek taşıyıcıları desteklemek).
İlgili konular
- 1. Etkin bellek ve etkin bellek nedir
- 2. Android Marketplace'te giriş/üyelik maliyeti nedir?
- 3. Swift'in kadrolarının çalışma zamanı maliyeti nedir?
- 4. DLR'nin bellek ayak izi nedir?
- 5. HttpModule ve Global.aspx arasındaki performans farkı nedir?
- 6. İş parçacığı yapılarının performans maliyeti: gözden geçirilmiş optimizasyonlar ve bellek ayırma
- 7. Tekrarlanan nesnelerle listeleme - Bellek ücreti nedir?
- 8. Örnek değişken nedir?
- 9. "Serbest değişken" nedir?
- 10. vim's @@ değişken nedir?
- 11. KnockoutJS'deki değişken $ verilerinin kaynağı ve amacı nedir?
- 12. Değişken ve değişmez arasındaki fark nedir?
- 13. Android Destek kitaplığında ActionBar # setDefaultDisplayHomeAsUpEnabled öğesi nedir?
- 14. Modern GPU'larda üniformalarda dallanma maliyeti
- 15. Windows için iyi sunucu performans izleme yazılımı nedir?
- 16. `+:` ve `-:` nedir?
- 17. CPU yüzer işlem maliyeti
- 18. Nesne Referans Değişkeni nedir?
- 19. Nedir? ve << demek?
- 20. Özellikler: Değişken atamada boş tanımlayıcının amacı nedir?
- 21. Bu kodda değişken görünürlük hatası nedir?
- 22. . Değişken enterpolasyon için doğru sözdizimi nedir?
- 23. Tomcat Bileşeni nedir? Catalina ve Coyote nedir?
- 24. Bu IIS bağlama nedir ve amaçları nedir?
- 25. Heroku trafik maliyetleri nedir?
- 26. "Deklaratif format" nedir?
- 27. JasperReports'ta değişken, parametre ve alan arasındaki fark nedir?
- 28. Windows ortamı değişken adları ve değerleri için geçerli karakterler nedir?
- 29. CAReplicatorLayer'ın ardındaki sihir nedir?
- 30. Android'de Destek Kitaplığı ile kullanılacak API düzeyi nedir?
Boost açık kaynak kodudur. Biraz araştırma yapabilir ve kaynak kodlarına göz atabilirsiniz. Neye bakacağınızı zaten biliyorsunuz gibi görünüyor. – Drop
"apply_visitor" başlık altında "çok sayıda ifs" yapar (aslında daha çok (büyük, meta programlanmış) bir varyantın türüne ('' ne() ') geçiş yapar, Açıkçası, bu sadece gereken minimum iştir.) – sehe