6 Stimmen

c++ maximale std::string Länge wird durch Stack-Größe oder Heap-Größe diktiert?

Wie in der Frage gefordert.
std::string myVar; das maximale Zeichen, das er enthalten kann, wird durch Stack oder Heap? bestimmt.

Dankeschön

9voto

GManNickG Punkte 476445

Standardmäßig wird der Speicher, der für std::string wird dynamisch zugewiesen.

Beachten Sie, dass std::string hat eine max_size() Funktion, die die maximale Anzahl der von der Implementierung unterstützten Zeichen zurückgibt. Die Nützlichkeit dieser Funktion ist jedoch fraglich, da es sich um ein Maximum der Implementierung handelt und andere Ressourcen, wie z. B. Speicher, nicht berücksichtigt werden. Ihre tatsächliche Grenze ist viel niedriger. (Versuchen Sie, 4 GB zusammenhängenden Speicher zuzuweisen, oder berücksichtigen Sie die Erschöpfung des Speichers an anderer Stelle).

2voto

Tony Delroy Punkte 98528

A std::string Objekt wird auf die gleiche Weise zugewiesen wie ein int oder ein anderer Typ muss: auf dem Stapel liegen, wenn es sich um eine lokale Variable handelt, oder sie kann static oder auf dem Heap, wenn new std::string verwendet wird oder new X donde X enthält die string usw..

Aber, das std::string Objekt かもしれません mindestens einen Zeiger auf zusätzlichen Speicher enthalten, der von der Zuordnungsfunktion bereitgestellt wird, mit der basic_string<> instanziiert wurde - für den std::string typedef d.h. heap-allocated memory. Entweder direkt in der ursprünglichen std::string Objektspeicher oder im Point-to-Heap zu finden sind:

  • ein Mitglied der Stringgröße,
  • möglicherweise eine Art von Referenzzähler oder Links,
  • die in der Zeichenfolge gespeicherten Textdaten (falls vorhanden)

一部 std::string Implementierungen haben "short string"-Optimierungen, bei denen sie Strings mit nur wenigen Zeichen direkt in das String-Objekt selbst packen (aus Gründen der Speichereffizienz, oft unter Verwendung einer Art von Union mit Feldern, die für andere Zwecke verwendet werden, wenn die Strings länger sind). Bei anderen String-Implementierungen und selbst bei solchen mit "short-string"-Optimierungen, die mit Strings umgehen, die zu lang sind, um direkt in das std::string-Objekt zu passen, müssen sie Zeigern/Referenzen auf die Textdaten folgen, die im vom Allokator bereitgestellten (Heap-)Speicher gespeichert sind.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X