2011-06-21 27 views
8

STL kapsayıcılarını yoğun kullanan oldukça karmaşık bir uygulama yazıyorum. Uygulama, birden çok std::map s üzerinde yinelenen ve binlerce kez çalıştırılan tek, nispeten basit, performansa duyarlı bir bölüme sahiptir. Testler, kontrol edilen yineleyicilerle (_SECURE_SCL, 0'a ayarlanmış) derleme yapmaktan çok, programın bir bütün olarak, bu bölümde tamamen yoğunlaştırılmış, neredeyse 2x hızda bir hızlanma ile sonuçlandığını göstermiştir. Gerek etkin ve _SECURE_SCL ayarları karıştırma sorunlara yol açar _SECURE_SCL ile derlenmiştir kütüphaneleri ile bağlantı çünküSeçilmiş olan yinelenen yineleyicileri devre dışı bırakmak

Ancak, ben 0'a _SECURE_SCL set ile uygulamayı derleme olamaz. Ayrıca, tüm performans duyarlı bitlerin tek bir kod içinde gerçekleşmesi durumunda, uygulamanın tamamında denetlenmeyen yineleyicileri kullanmak oldukça saçma buluyorum. Bu, bebeği banyo suyuna atmak gibi bir şey olabilir.

hangi seçeneklere kontrol ettim adım adım elde derlenmiş kütüphaneler ile uyumluluğu korurken seçici performans duyarlı kodu/konteynerler için işaretlenmemiş iteratörler gerekiyor? Zaten anladığımız kadarıyla

+0

Teşekkür! – drxzcl

+0

Yardım etmekten memnun oldum. İyi bir soru güzel görünmeli! –

cevap

4

Bu benim için çalışıyor: biçimlendirme yardım

vector<BYTE> v; 
vector<BYTE>::iterator i; 
vector<BYTE>::iterator::_Unchecked_type ui; 

i = v.end(); 
ui = i._Unchecked(); 

ui++; 
+0

Harika çalışıyor, sen benim kahramanımsın! Bu şeyler hakkında bilgi bulmak ne kadar zor. – drxzcl

+0

Bu çözüm VC9/VS2008'de desteklenmiyor gibi görünüyor, bu doğru mu? – drxzcl

+1

Evet, kodlama VS2010'da yapıldı. – nnn

6

, kendi kod parçası kullanmak amacıyla öyleyse, o parçayı herhangi geçen gerektirmeyen bir arayüz vermek gerekir, kontrol kullanır kodu/kontrolsüz yineleyicinızı karştramazsnz kaplar ve yineleyiciler. (Bunun std::string'a kadar uzandığını unutmayın.)
Ve tabiki bu kodu kendi çalıştırılabilir belleğine (DLL) eklemeniz gerekecek. Elbette, bu, bu API’da çok fazla sayıda geri arama yapılmasını gerektirmez.

Güvenli tarafta olmak için, bu parçayı bir C arabirimine sahip bir DLL'ye koymayı düşünmekteyim bile.

+0

Cevabınız için teşekkür ederiz. Bu, duymayı umduğum şey değil, ama mantıklı. Farklı bir STL uygulamasından kapsayıcı kullanımından ne haber? – drxzcl

+0

@Ranieri: Aynı acı: _very_ muhtemelen işe yaramaz. – sbi

İlgili konular