2010-12-10 31 views
9

Profil oluşturma işlemi, C++ akışlarının, performans (hız) gerektiğinde dosya veya metin dizisi manipülasyonunu gerçekleştirmenin en iyi yolu olmadığını gösterir. Yine de standart akışlar, işleri güvenli kılmak için iyi bir yoldur.Will C++ 0x RValue referansları veya diğer özelliklerin akış performansı üzerinde etkisi olacak mı?

Okuduğum kadarıyla, çoğu uygulama, akış uygulamalarının 1) çok sayıda küçük nesne oluşturması/kopyalamasıdır 2) tamamen genel değildir (char ve wchar'ı aynı şekilde yönetemez misiniz?) Vb. Her neyse, belki de bazı C++ 0x'ların uygulayıcıların en azından nesne oluşturma/kopyalamayı sınırlamalarına izin vereceğini düşünüyordum ve belki de diğer performans iyileştirmelerine izin verecek başka özellikler de mevcut olabilir, belki printf() performansına erişme izni veriliyor olabilir. ?

Anında bir etkisi var mı? Yoksa yeni uygulamaları beklemek zorunda mıyız? Yoksa yeni (STL benzeri) bir akış kütüphanesine hala ihtiyacımız var mı?

+0

Sadece konuyla ilgili bir yan not. IO kütüphanelerinin tasarlanması çok zor olduğu benim düşüncem. Herhangi bir dilde IO kütüphanesini 1) güvenli, 2) verimli, 3) taşınabilir ve 4) ortalama bir programlayıcı tarafından kullanılabilir (örneğin benim gibi). Yukarıdaki koşullara sahip bir tasarımın imkansız olduğunu söylemiyorum, sadece programcıların düşündüğünden daha zor olduğunu söylüyorum. Btw, soru için +1. – AraK

+0

Katılıyorum. Sanırım akışları uygulamaya yardımcı olmak için mevcut Boost.IOStream var neden ana nedeni budur. Bazı insanlar, standart akışla ilgili temel problemlerin, uygulandığı anda şablon özelliği bulunmadığı için şablon/jeneriklikle düşüncenin yanlış olduğunu söylediğini duymuşlardır. Sıklıkla, STL gibi jenerikliğe dayalı yeni bir akış kütüphanesinin tasarlanmasının çok sayıda performans problemini çözeceğini öne sürüyorlar. – Klaim

+0

IOstreams, Standart için yeniden geliştirilmiştir. 2002 yılında standart öncesi C++ sistemini standartlara uygun hale getirme konusunda sahip olduğum bir konu, bunlardan bazılarının, sınıflandırma ve fonksiyonlara dönüştükleri zamanki değişimiydi. –

cevap

3

my question here performans karşılaştırmaları ilginizi çekebilir. C++ standart kütüphane akışları API'sindeki en düşük seviye işlevleri bile, ortak uygulamalar altında inanılmaz derecede yavaştır ve örn. Visual C++ 's stringbuf sınıfı, küçük geçici nesnelerin kopyalarını göremiyorum. Öyleyse, rvalue referansların çok fazla yardımı olmayacaktır.

C++ iostream'lerinin yavaş olmasının ana nedeni AFAICT, kütüphane geliştiricilerinin I/O'nun darboğaz olduğu bir zihniyetle tıkanmış olmalarıdır, dolayısıyla I/O kütüphanesinin performansı hakkında endişe etmenin bir anlamı yoktur. Ama I/O kesinlikle darboğaz değil.

+0

Sorunuzu işaretlediğiniz için teşekkür ederiz, çok eksiksiz! – Klaim

+0

Evet. I/O darboğaz ... ama OS çekirdeği arabelleğe alınıyor. I/O kütüphanelerinde zaman harcamak sadece zaman kaybıdır. –

+0

@Zan: C++ iostreams'ını ilk kez kıyasladığımda bana da bir sürpriz geldi, ama çok yavaşlar, soğuk disk önbelleğinde bile, G/Ç darboğaz değildir. –

İlgili konular