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
Das winzige Code, das Sie eingefügt haben, sieht gut aus. Es gibt keinen Grund, es zu ändern. –
Und du bist sicher, dass es ein Leck ist? Nicht nur mehr Speicher wird verbraucht? Die Stacheliterale werden kein Leck verursachen. – mattjgalloway
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