Mikro optimize edici insanlar için giriş
Hatırlamak:
"Programcılar, programlarının kritik olmayan bölümlerinin hızını düşünmek veya bunlardan endişe etmek için çok fazla zaman harcıyorlar ve bu verimlilik girişimlerinin hata ayıklama ve bakım dikkate alındığında gerçekten güçlü bir olumsuz etkisi var. Zamanın% 97'si: erken optimizasyon tüm kötülüğün köküdür, ancak fırsatlarımızı bu kritik% 3'te geçmemeliyiz "dedi.
( Tam teklif için metamorfoza teşekkürler )
Sadece daha düşük seviyeli olması gerektiğinden daha hızlı olduğuna inandığınız için bir vektör (veya herhangi bir şey) yerine C dizisi kullanmayın. Yanlış olur.
Varsayılan vektör (veya ihtiyacınıza göre uyarlanmış güvenli kap) ile kullanın ve daha sonra profil oluşturucunuz bir sorun olduğunu söylüyorsa, daha iyi bir algoritma kullanarak veya kap değiştirerek onu optimize edip edemeyeceğinize bakın.
Bu, orijinal soruya geri dönebileceğimizi söyledi.
Statik / Dinamik Dizi?
C ++ dizi sınıfları düşük seviyeli C dizisinden daha iyi davranırlar çünkü kendileri hakkında çok şey bilirler ve C dizilerinin yapamayacağı soruları cevaplayabilirler. Kendilerini temizleyebilirler. Ve daha da önemlisi, genellikle şablonlar ve / veya satır içi satırlar kullanılarak yazılır, yani hata ayıklamada çok sayıda koda görünen, sürüm oluşturmada üretilen kodun çok az veya hiç olmadığı anlamına gelir, yani yerleşik daha az güvenli rekabetleriyle hiçbir fark yoktur.
Sonuçta, iki kategoriye ayrılır:
Dinamik diziler
Malloc-ed / new-ed dizisine bir işaretçi kullanmak en iyi std :: vector sürümü kadar hızlı ve çok daha az güvenli olacaktır ( litb'nin gönderisine bakın ).
Bu yüzden bir std :: vector kullanın.
Statik diziler
Statik bir dizi kullanmak en iyisi olacaktır:
Bu yüzden bir std :: dizisi kullanın .
Başlatılmamış bellek
Bazen bir kullanma vector
nedeniyle yerine bir ham tampon görünür bir maliyet doğurur vector
inşaatında tamponunu ilk olacak kod cümledeki ise etmedikleri söylediği gibi, bernie onun içinde tarafından cevap .
Bu durumda, bir unique_ptr
yerine vector
veya kullanarak kod durumunuzda istisnai değilse, aslında buffer_owner
bu belleğe sahip olacak bir sınıf yazın ve buna dahil olmak üzere kolay ve güvenli erişim sağlayın. yeniden boyutlandırma ( realloc
? kullanarak ) veya ihtiyacınız olan bonuslar .