'boş gerekçesi ne sonlandırılmış dize? | Netgez.com
SORU
11 Aralık 2010, CUMARTESİ


'boş gerekçesi ne sonlandırılmış dize?

C ve C sevdiğim kadar , ama kafamı çizik boş sonlandırılmış dize seçimine yardımcı olamam:

  • Uzunluk öneki (örneÄŸin Pascal) dize C önce de vardı
  • UzunluÄŸu dizeleri çeÅŸitli algoritmalar daha hızlı sabit süre ara vererek öneki.
  • UzunluÄŸu dizeleri daha zor arabellek taÅŸması hataları neden yapmak öneki.
  • EÄŸer dize kullanılabilir hafıza boyutunu olmak için bile 32 bit bir makinede, uzunluk öneki bir dizesinin boÅŸ sonlandırılmış bir dize daha sadece üç bayt daha geniÅŸ. 16 bit makinelerde bu tek bir bayt. 64 bit makineler, 4GB olduÄŸunu makul bir dize uzunluÄŸu sınırı, ama bile istediÄŸiniz geniÅŸletmek için boyutu makine kelimesi, 64 bit makineler genelde bol hafıza verme fazladan yedi bayt sıralama boÅŸ bir argüman. Orijinal C standart delicesine zavallı makineleri (bellek açısından) için yazıldığını biliyorum, ama verimlilik argümanı beni burada satmaz.
  • Hemen hemen her diÄŸer dil (yani Perl, Pascal, Python, C#, vb, Java) uzunluk öneki dizeleri kullanın. Bu diller genellikle dizeleri ile daha etkili olduÄŸu için dize iÅŸleme kriterler C yendi.
  • C std::basic_string ÅŸablon ile bu biraz düzeltmiÅŸ ama, basit karakter dizileri boÅŸ sonlandırılmış dize bekliyor hala yaygındır. Bu yığın ayırma gerektirir, çünkü aynı zamanda eksik.
  • BoÅŸ dizeleri uzunluk öneki dizeleri gömülü boÅŸluk içerebilir ancak dize olamaz var olan bir karakter (yani, null, rezerv, gerek sonlandırıldı.

Bu işler çok C bunların bilinmiyor olması mantıklı olur o yüzden son zamanlarda C daha hafif geldi. Ancak, birkaç C gelmeden önce de düz idi. Neden boş sonlandırılmış dizeler belli ki üstün uzunluğu önek yerine seçilmiş olurdu?

EDİTBazı istedi berigerçekler(ve ben zaten sağlanan olanlar gibi değildi) benim verim noktası üstünde birkaç şeyden kaynaklanıyor:

  • Herhangi bir parametre boÅŸ sonlandırılmış dize kullanarak O(n m) zaman karmaşıklığı gerektirir. UzunluÄŸu önek genellikle sadece O(m) gerektirir.
  • UzunluÄŸu boÅŸ sonlandırılmış dize kullanarak(n) zaman karmaşıklığı gerektirir. UzunluÄŸu önek, O(1) ' dir.
  • UzunluÄŸu ve herhangi bir parametre farkla en yaygın string iÅŸlemleri. BoÅŸ sonlandırılmış dize daha verimli olabileceÄŸi bazı durumlar vardır, ama bu çok daha az görülür.

Cevap aşağıda, bu boş sonlandırılmış dize daha etkili olduğu bazı durumlar şunlardır:

  • Ve bazı yönteme geçmek için bir dize ihtiyaç başından kesmek gerekir. Gerçekten varsa uzunluÄŸu önek muhtemelen uyum kuralları takip etmek gerekiyor çünkü özgün dize yok etmek için izin, varsa bile uzunluÄŸu önek ile sürekli bunu yapamazsın.
  • Sadece karakter ile bir dize karakteri döngü gittiÄŸini bazı durumlarda CPU bir kayıt kaydetmek mümkün olabilir. Unutmayın bu sadece çalışır durumda olan sen deÄŸil dinamik olarak atanan dize (Çünkü olacaktın ücretsiz, gerektiren kullanarak CPU kayıt kurtardın tutmak iÅŸaretçiyi aslında var malloc ve arkadaÅŸları).

Yukarıdakilerin hiçbiri uzunluğu ve herhangi bir parametre kadar yaygındır.

Bir daha cevapları aşağıda iddia var:

  • Dizenin sonuna kesmeniz gerekir

ama bu bir boş sonlandırılmış ve uzunluk öneki dizeleri için zaman aynı miktarda bu yanlış. (Boş sonlandırılmış dize sadece yeni bir son olmasını istediğiniz, uzunluğu prefixers sadece önek çıkarmak boş bir sopa.)

CEVAP
11 Aralık 2010, CUMARTESİ


horse's mouth:

BCPL hiçbiri, B veya C destekler bu karakter veri şiddetle dil; her fazla dizeleri davranır ve tamsayılar vektörler gibi birkaç genel kurallar takviyeleri kuralları. Hem BCPL ve B dize adresini gösterir statik bir alan ile başlatıldı dize, dolu karakterler hücreler. BCPL, ilk bayt dolu karakter sayısını içerir string; B, Kont yok ve dizeleri tarafından sonlandırıldı Özel Karakter, B yazılmış *e. Bu değişiklik kısmen yapıldı uzunluğu sınırlamasını önlemek için bir dize holding kaynaklanan 8 - ya da 9-bit bir yuvaya ve sayısı kısmen sayısını korumak çünkü bizim deneyim, daha az görünüyordu bir sonlandırıcı kullanarak daha rahat.

Bunu PaylaÅŸ:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • PremiumBeat.com - Royalty Free Music

    PremiumBeat.

    16 Kasım 2008
  • Rozetked | Обзоры

    Rozetked | Ð

    5 AÄžUSTOS 2011
  • ThePointblank

    ThePointblan

    18 Aralık 2006