2 Stimmen

Stack-Speicher mit iostream

Ich bin kürzlich auf einen Segmentationsfehler gestoßen, der einer Zeile entspricht

some_file << some_number << ": ";

Wenn der für diese Anwendung allokierte Stack-Speicher (es handelt sich um ein Pseudo-Embedded-System) auf 512 kB erhöht wird, haben wir keinen Segmentation fault.

Wenn man mit dem Operator (<<) in eine Datei schreibt, wie wirkt sich dies auf den Stack-Speicherverbrauch aus?

Die some_file, in die geschrieben wird, ist ein std::ofstream. Die some_number, die geschrieben wird, wird als Referenz an die Methode übergeben, in der diese Beispiellinie Code steht. Die Software ist 32-Bit und mit g++ auf CentOS kompiliert.

Ich frage mich, wie (oder ob) ofstream dynamische Speicherzuweisung verwendet, selbst in allgemeineren, höheren Ebenen.

1voto

dutt Punkte 7405

Mein erster Gedanke war einfach jalfs Kommentar hochzuvoten, aber es gibt einige Dinge, die bekannt sind. Es sei denn, die Systemimplementierung von STL oder der Compiler ist wirklich ungewöhnlich.

Es sei denn, es ist inline, und das liegt am Compiler, gibt es einen Funktionsaufruf, was bedeutet, dass eine Menge Dinge auf den Stack geschoben werden. Wie viel der Aufruf erfordert, hängt von der Anzahl der Register, der Größe der Register usw. ab.

Aber mehr Stack könnte innerhalb des Aufrufs von operator<< verwendet werden. Alle lokalen Variablen verwenden Stack, und andere Funktionsaufrufe innerhalb von operator<< verwenden den Stack, es sei denn, sie sind inline. Und so weiter.

Es hängt von der Implementierung der Klasse ab, von der some_file eine Instanz ist. Ohne weitere Details können wir nichts Spezifisches sagen.

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