[gelöst] Integer auf dem Heap

Dein Thema passt einfach in kein Forum? Dann probiers mal hier.
Antworten
BartSimpson
Beiträge: 1379
Registriert: 6. November 2004 12:03
Kontaktdaten:

[gelöst] Integer auf dem Heap

Beitrag von BartSimpson »

Hallo hat jemand eine Idee, wie ich auf einem Integer auf dem Heap zugreifen kann??
Hier der Code:

Code: Alles auswählen

int *Liste;
Liste=new int;
HeapCacheInteger->insert(QUuid::createUuid(),Liste);
for(Liste=0;Liste<55;Liste++)
{
  blabla[Liste]=GGGGG;
}
Nur wie muss ich den Variable Liste in der For Schleife ändern??
Falls jetzte die Frage kommen sollte, warum es unbedingt auf dem Heap sein soll: Es handelt sich um eine Funktion die extrem häuft per rekusion aufgerufen wird, wo leider manchmal der Stack zu klein ist:(
Also habe ich mir gedacht, ab auf den Heap damit und um da wieder aufzuräumen das ganze in ein QCache.
Zuletzt geändert von BartSimpson am 17. April 2006 19:39, insgesamt 1-mal geändert.
upsala
Beiträge: 3946
Registriert: 5. Februar 2006 20:52
Wohnort: Landshut
Kontaktdaten:

Beitrag von upsala »

Wenn ich das richtig sehe, willst du eine Liste mit 56 Integerwerten auf dem Heap ablegen. Warum dann nicht einfach ein QList<int>? Die Verwaltungsdaten der QList landen auf dem Stack (auf meiner Maschine hier sind das gerade mal 4 Byte!) die eigentlichen Daten auf dem Heap. Und das Risiko eines Bufferoverflows ist auch viel geringer (oder siehe aktuelle c't: Heap-Overflows S. 186)
BartSimpson
Beiträge: 1379
Registriert: 6. November 2004 12:03
Kontaktdaten:

Beitrag von BartSimpson »

nee das mit der 54 ist nur ein Beispiel. Bei jeder rekusion können es über
20.000 Werte sein. Und ebensolviele rekusionen. Die anderen Objekte liegen ja schon auf dem Heap per QCache. Nur die Sache mit dem Integer ist etwas verzwickt:( Das Raufpacken ist ja nicht das Problem. Nur wie soll man da den Wert setzen:(
BartSimpson
Beiträge: 1379
Registriert: 6. November 2004 12:03
Kontaktdaten:

Beitrag von BartSimpson »

So jetzt geht's mit.

Code: Alles auswählen

int *Liste=new int;
HeapCacheInteger->insert(QUuid::createUuid(),Liste);
for(*Liste=0;*Liste<XX;*Liste=*Liste+1)
{
.
.
.
}
Das in der C't habe ich auch gelesen.
Und wer auf gut Glück memcpy nutzt naja :shock:
Aber hat jemand eine Idee, wie man rausfinden kann, ob am Schluss wirklich alles wieder sauber vom Stack und Heap geräumt wird??
Goos
Beiträge: 360
Registriert: 17. August 2004 10:10
Wohnort: Black Forest

Beitrag von Goos »

BartSimpson hat geschrieben: Aber hat jemand eine Idee, wie man rausfinden kann, ob am Schluss wirklich alles wieder sauber vom Stack und Heap geräumt wird??
Es gibt (meistens recht teure) Tools, die sowas ueberpruefen.
Ansonsten musst halt einfach darauf achten, deine delete Aufrufe nicht zu vergessen :)

Goos
BartSimpson
Beiträge: 1379
Registriert: 6. November 2004 12:03
Kontaktdaten:

Beitrag von BartSimpson »

Aber da gibt es doch garaniert was aus der OpenSource Welt oder?
Goos
Beiträge: 360
Registriert: 17. August 2004 10:10
Wohnort: Black Forest

Beitrag von Goos »

Oh, da bin ich leider nicht weiter informiert. Geben tuts ueberall irgendwas, obs gut funktioniert ist ne andere Frage.
Falls du noch was entsprechendes findest, dann kann mans ja bei den Tipps mal reinschreiben.

Goos
Antworten