2011-04-08 24 views

cevap

8

ederiz.

std::string'un, uygulama tarafından desteklenen maksimum karakter sayısını döndüren bir max_size() işlevi olduğunu unutmayın. Bunun faydası, maksimum bir uygulama olduğu ve bellek gibi diğer kaynakları dikkate almadığı için şüphelidir. Gerçek limitin çok daha düşük. (Bitişik 4GB bellek tahsis deneyin veya başka hesap bellek tükenme dikkate alır.)

+0

ah, başka bir yerel var gibi göründüğünden yığın sınırlı olacağını düşündüm. Herhangi bir std :: object yığında tahsis edilir? – eugene

+0

@Eugene: no, 'myVar 'yığın olarak ayrılmış, ancak ayrılmış (genel olarak) yığın dizesini saklamak için bir dahili arabellek tutar. STD kapsayıcılar genellikle, kaynak ayırmakla görevli bir "Allocator" parametresini alırlar ve genellikle yığın üzerinde tahsis ederler. –

+0

@Eugene bağlıdır, ancak kaplar için, evet, veri genellikle yığın halinde. Bir ayırmayı her zaman "use" yığınına (bleh) birleştirebilirsiniz. – Anycorn

2

bir std::string amacı aynı şekilde tahsis edilecek bir int ya da başka bir tip olması gerekir: yerel bir değişken ya da, eğer yığın std::string nesne may hangi < basic_string ayırıcı tarafından sağlanan ek bellek en az bir gösterici içeren, static olabilir veya Xstring vb içerir new std::string kullanıldığında, yığın veya new X üzerinde ..

Ancak olabilir > örneklendi -içintypedef, yığın ayrılmış bellek anlamına gelir.

  • bir dize boyutu üyesi muhtemelen
  • referans sayacı veya bağlantılardan bazılarını şekilde
  • ,
  • metinsel veriler: Ya doğrudan orijinal std::string nesne bellekte veya sivri-Sizin bulmak için bekleyebilirsiniz yağdırmak dize depolar

bazı std::string uygulamaları genellikle birlik çeşit ile kullanarak, bellek verimliliği için (doğrudan dize nesnenin kendisine sadece birkaç karakter dizeleri paketi "kısa dize" optimizasyon var (eğer varsa) dizgiler daha uzun olduğunda diğer amaçlar için kullanılan alanlar. Ancak, diğer dize uygulamaları için ve std :: string nesnesine doğrudan sığmayacak kadar uzun olan dizelerle uğraşırken kısa dizeli optimizasyonları olanlar için bile, saklanan metin verilere işaretçiler/referanslar izlemelidirler. Allocator tarafından sağlanan (yığın) bellekte.

İlgili konular