2012-03-28 4 views
1

Ich habe eine C-Funktion, die Tausende von Malen aufgerufen wird und ich habe festgestellt, dass es die einzige mögliche Platz für ein Speicherleck ist. Ich habe Valgrind und Totalview's MemoryScape verwendet, um nach Lecks zu suchen, aber sie sagen nichts, aber wenn die Anwendung unter AIX 6.1 läuft, gibt es ein allmähliches Leck.String-Literale, die zu einem kleinen Speicherleck führen?

HINWEIS: Ich verwende ein "leckfrei" SAP RFC SDK für diese, und habe mit den Entwicklern gesprochen und sie sagen, die Lib, die ich benutze, ist 100% leckfrei ... so ist es nicht, dass ...

der Code ist etwa wie folgt, und tausende Male pro Stunde genannt ....

int writeMessage(message msg){ 
... 
... 
header = ItCreate("HEADER", HEADER_LEN, 0, 0); 
body = ItCreate("DATA", DATA_LEN, 0, 0); 
... 
... 
ItDelete(it_header); 
ItDelete(it_body); 
... 
} 

Könnten diese Zeichenketten wie „Header“ und „DATA“ mein kleines Leck verursachen? Dumme Frage, aber ich würde eher bitten, in Sicherheit zu sein.

Was wäre der Unterschied, wenn ich sie in diesem speziellen Fall als CONSTANTS deklarieren würde?

Danke für die Hilfe, viel

geschätzt
+0

Das winzige Code, das Sie eingefügt haben, sieht gut aus. Es gibt keinen Grund, es zu ändern. –

+0

Und du bist sicher, dass es ein Leck ist? Nicht nur mehr Speicher wird verbraucht? Die Stacheliterale werden kein Leck verursachen. – mattjgalloway

+0

Es gibt einen kleinen Unterschied in der Benennung (header vs it_header), aber können wir annehmen, dass das ein Tippfehler war? Übrigens: Wie weißt du, dass da ein Erinnerungsleck ist? Nur auf Vsize von Top schauen? – wildplasser

Antwort

1

Ein Zeichenfolgenliteral selbst reserviert keinen oder gibt keinen Speicher frei, und daher kann nicht austreten.

Die Deklaration von const wird nichts ändern. Dein Problem ist woanders.

1

Könnten diese Zeichenketten wie „Header“ und „DATA“ meine verursachen kleines Leck?

Nein.

2

Nein. Ein String-Literal hat eine statische Speicherdauer und daher ist sein Speicher vor dem Programmstart reserviert und seine Lebensdauer ist die gesamte Ausführung des Programms.

+1

Sieht aus wie eine Welle von downvotes gerade aufgetreten ist;) – ouah

3

Antwort ist ja, aber es kommt darauf an was ItCreate tun. Fügen Sie den Funktionscode ItCreate ein.

+0

Diese Funktion ist innerhalb des SAP RFC SDK ... kein Zugriff dazu .... –

Verwandte Themen