hi

On Wed, 09 Jul 2003 23:49:13 +0200
Andreas Pakulat <[EMAIL PROTECTED]> wrote:

> On 09.Jul 2003 - 20:26:50, Patrick Schnorbus wrote:
> > Mir ist etwas aufgefallen:
> > 
> > 1) Ein Programm oeffnen, welches QTextEdit benutzt (z.B. kwrite)
> > 2) Mit top o.ae. den Speicherverbrauch messen.
> > 3) Viel Text einfuegen, so dass der Speicherverbrauch hochgeht.
> > 4) Den Text wieder entfernen
> > 5) Der Speicherverbrauch bleibt konstant oben.
> > 
> > Es scheint so, als ob sich QTextEdit bei Bedarf neuen Speicher zwar
> > allokiert, ihn aber nicht wieder freigibt, wenn er nicht mehr
> > benoetigt wird. Kann das jemand reproduzieren?
> > Ich verwende Woody mit Qt 3.1.2.

Das ist durchaus drin. Wenn es dich st�rt, w�rde ich einen eigenen
Editor schreiben. Zum Speichern des Inhaltes kannst du zum Beispiel eine
STL Rope verwenden.

Wenn das doch zu viel Aufwand ist, so l�sche das QTextEdit und erzeuge
ein neues.

QString old=mytextedit->text();
delete mytextedit;
mytextedit = new QTextEdit (this);
mytextedit->setText(old);
foolayout->insertbla(mytextedit,bla);

irgendwie so.

Eine ordentliche Editor Speicherverwaltung w�re zum Beispiel:

Sobald der Edit Puffer �berl�uft, verdoppele seine gr��e.

Sobald der Edit Puffer nur ein Viertel gef�llt ist, halbiere seine
gr��e.

Aber eine STL Rope sollte einfacher sein als alles selber zu machen und
auch effizienter. Ich selbst habe f�r einen Editor mal zwei
Auslagerungsstapeldateien verwendet. Der Bereich, der gerade editiert
wird ist im Speicher. Er ist aber nicht gr��er als 32 KB (war ein
DOS-Editor). Wenn man ein Zeichen einf�gt, so werden die Zeichen in
diesem Puffer nach rechts umkopiert und das Zeichen an der richtigen
Stelle eingef�gt. L�uft der Puffer �ber, so wird das �berlaufende auf
den linken oder rechten Auslagerungsstapel gesetzt. Will man auf Zeichen
links vom Puffer zugreifen, so wird rechts ausgelagert und links
eingelagert (immer eine gewisse PAGESIZE gross), bis man angekommen ist.
Ergo ist insert und delete immer gleicheffizient, egal wieviele
Terrabytes der Text gross ist. Aber wehe du moechtest an den anfang oder
das ende der datei springen, dann musst du die ganzen Stapel
durchrollen. �brigens ist Laden und Speichern solcher Files auch mit
einem durchrollen verbunden... Die STL Rope ist irgendwie so �hnlich,
nur aber komplett im Speicher. Aber evtl. kann man das korrigieren. Doku
ist ziemlich gut.

�brigens das mit dem QTextEdit ist kein Memory Leak, denn der delete des
QTextEdit gibt den Speicher frei. Aber wenn du deine Qt-Programme mal
mit "valgrind" (debian paket) laufen l�sst, so findest du echte Leaks
:-)


cya!
erik


-- 
Erik Thiele


--
Haeufig gestellte Fragen und Antworten (FAQ):
http://www.de.debian.org/debian-user-german-FAQ/

Zum AUSTRAGEN schicken Sie eine Mail an [EMAIL PROTECTED]
mit dem Subject "unsubscribe". Probleme? Mail an [EMAIL PROTECTED] (engl)

Antwort per Email an