Was ist der richtige Weg, um zugewiesenen Speicher in der Fremdsprache zu verwalten?

9

Mein Fall ist ziemlich einfach: Ich habe eine C ++ - Anwendung und eine Haskell-Bibliothek, und ich muss nur eine Funktion aus Haskell exportieren, die eine C-Zeichenfolge zurückgeben würde.

Das Problem ist, dass die C-Zeichenfolge ursprünglich ein String ist, und um eine C-Zeichenfolge daraus zu erhalten, muss ich Speicher zuweisen, der explizit freigegeben werden muss (Haskells free oder finalizerFree , als Dokumentation für newCString sagt).

Was ist ein guter Weg, damit umzugehen? Speziell habe ich ein paar Überlegungen:

Idealerweise möchte ich den Haskell-Laufzeit-GC dazu bringen, das zu handhaben, aber ich bin mir nicht sicher, wie es möglicherweise wissen könnte, wann und wenn die fremde Seite den Speicher noch nicht benötigt. Ist es möglich?

Wenn nicht, kann ich einfach Cs free aufrufen oder ist der CString Speicher von der Haskell-Laufzeitumgebung verwaltet? wenn nicht, nehme ich an, dass ich Haskells free auch exportieren muss, und rufe es von der ausländischen Seite an, richtig?

    
MasterMastic 22.01.2015, 21:18
quelle

1 Antwort

1

Sie müssen die Zeichenkette wieder freigeben: Wie Sie sagen, kann Haskells GC nicht wissen, ob das auf der fremden Seite noch benötigt wird.

Haskells free entspricht genau C's free . Sie können entweder von der Seite, die Sie bevorzugen, anrufen.

%Vor%

Ich habe nicht überprüft, ob dies durch den Haskell-Bericht + FFI-Nachtrag vorgeschrieben ist, aber ich denke schon.

    
chi 22.01.2015 22:53
quelle

Tags und Links