SORU
26 Mayıs 2010, ÇARŞAMBA


dizeleri vs::değişmez standart bir dize

Son D değişmez dizeleri seçtim, here dizeleri ve here de değişmez ile ilgili bir şeyler okuyordum. Pek çok avantajı var gibi görünüyor.

  • basit iş parçacığı güvenli
  • daha güvenli
  • daha fazla bellek kullanımı çoğu durumda etkili.
  • daha alt dizeleri (ve Dilimleme tokenizing)

En yeni diller değişmez dizeleri söz, D2 değil.0,, C#, Python, Java vb.

C değişmez dizeleri yararlanacak?

Bu avantajlara sahip olacağını c (veya c 0 x) değişmez dize bir sınıf uygulamak mümkün mü?


güncelleme:

Değişmez dizeler iki girişimleri const_string fix_str vardır. Ne yarım on yıl içinde güncellendi. Hatta kullanılır? Neden mi const_string şimdiye kadar artış oldu?

CEVAP
16 Mayıs 2011, PAZARTESİ


Bu konuyu çoğu insan gerçekten immutable_string anlamıyorum buldum. Sadece constness değildir. immutable_string gerçekten güç performansı (hatta tek iş programı) ve bellek kullanımı.

Hayal eğer tüm dizeleri değişmez, ve her dizesi gibi uygulanır

class string {
    char* _head ;
    size_t _len ;
} ;

Nasıl alt str bir işlem uygulayabilir miyiz? Herhangi bir char kopyalama gerek yok. Tek yapmamız gereken _head ata _len. Sub-string kaynak, string ile aynı hafıza segmenti paylaşıyor.

Tabii gerçekten bir immutable_string sadece iki veri üyeleri ile sağlayabiliriz. Gerçek uygulama referans-saydım(veya uçmak ağırlıklı) bir bellek bloğu gerekebilir. Bu gibi

class immutable_string {
    boost::fly_weight<std::string> _s ;
    char* _head ;
    size_t _len ;
} ;

Bellek ve performans özellikle de ne yaptığını biliyorsun çoğu zaman geleneksel dize daha iyi olurdu.

Elbette C değişmez dize yararlanabilir ve güzel bir tane var. boost::const_string fix_str Cubbi tarafından belirtilen kontrol ettim. Bu bahsettiğim şey olmalı.

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • Android Central

    Android Cent

    13 Kasım 2008
  • MyTiredBones

    MyTiredBones

    2 Temmuz 2013
  • TomKNJ

    TomKNJ

    26 ŞUBAT 2007