Frage

Ich habe so ziemlich meine erste Arbeits Symbian Anwendung fertig, aber in meinem beeilte Lernen haben wenig Aufmerksamkeit auf die Speicherverwaltung bezahlt und drückt auf und der Stapel Reinigung?

Könnte jemand bitte mich in Richtung einige der besten Praktiken verweisen hier zu verwenden, und vielleicht einige der besten Leckerkennung / Speicher Profilierwerkzeuge.

Zum Beispiel, wenn ich eine TDesC oder eine TPtrC16 in einer Funktion greifen, wie kann ich sie dann die beste Art und Weise aufzuräumen, ist es einfach

TPtrC16 temp = ...
temp.CleanupClosePushL();
CleanupStack::PopAndDestroy()

.. für alles?

Danke und bitte verzeihen Sie mir, ich bin ein selbst Symbian n00b gestanden.

War es hilfreich?

Lösung

Ich habe in der Vergangenheit verwendet HookLogger von Symbian zu verfolgen und Speicherlecks untersuchen. Es ist nicht die beste, aber es ist sicher nicht helfen. Außerdem erhöht der Heap-Marker ALLOC panics bei Speichern, wenn Ihr Ausgang Ihrer Anwendung undicht. Die Informationen, diese panics bieten kaum hilfreich, aber es ist gut Hinweis darauf, dass es ein irgendwo Speicherleck ist. Von dort können Sie Tools wie HookLogger verwenden, auf dem ein Teil des Codes zu verengen in das Leck an eingeführt zu werden.

erwähnte ich ein paar Symbian Ressourcen in Antwort auf diesen Thread . Während alle, die für mich sehr nützlich gewesen sind, habe ich das Buch Accredited Symbian Entwickler Primer sehr hilfreich. Wenn Sie Ihre Hände bekommen könnte, würde ich es auf jeden Fall empfehlen. Es ist eine schnelle lesen, aber es erklärt die Konzepte brillant, auch Dinge über die Speicherverwaltung und Deskriptoren.

Andere Tipps

Dinge auf dem Stapel gespeichert brauchen nicht auf dem Cleanup-Stack gespeichert werden (es sei denn, sie eine spezielle Behandlung (R Klassen usw. benötigen, siehe unten))

Der Cleanup-Stack ist für Objekte zu löschen, wenn ein Urlaub (man denkt Ausnahme) auftritt, was sonst ein Speicherleck würde.

Die tatsächliche Verwendung des Bereinigungsstapels durch die statischen Funktionen CleanupStack :: PUSHL (..) und CleanupStack :: Pop / PopAndDestroy.

Einige Klassen wie RDATEI, haben RFS geschlossen und nicht gelöscht, so dass für diese Funktionen ihre haben :: Close-Funktion aufgerufen, so dass Sie die globale Funktion CleanupClosePushL () verwenden sollte, die anstelle der Delete-Operator auf Ihrem Objekt fordert ein Urlaub, es ruft die Klasse :: Close-Funktion statt.

Ihr Code für Speicherlecks zu überprüfen, können Sie die Makros __UHEAP_MARK verwenden; und __UHEAP_MARKEND; die prüft, ob nichts bleibt auf dem Heap von zwischen diesen beiden Anrufe.

Wenn Sie etwas auf dem cleanupstack in Ans Caktiv verlassen :: RunL, die aktive Scheduler Panik.

Als allgemeine Technik, wenn eine Funktion, die Sie rufen könnte verlassen, (durch eine Hinter ‚L‘) dann anythign, die gelöscht werden müssen oder geschlossen (usw.) sollten die hinzugefügt werden Cleanup-Stack.

Es dauert ein wenig unter 10 Seiten richtig exmplain alles, was Sie brauchen, um über die CleanupStack und Speicherverwaltung für Symbian C ++ kennen.

Shameless Stecker: Dieses Buch wurde für die Ebene von n00bness speziell geschrieben: http://www.quickrecipesonsymbianos.com

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top