2016-03-16 1 views
4

J'espérais que quelqu'un pourrait clarifier un aspect du comportement du garbage collector Julia et comment il interagit avec la mémoire allouée par un appel à une fonction C en utilisant ccall.Garbage collection de Julia de données allouées ccall

Par exemple, je fais l'appel suivant:

setup::Ptr{Void} = ccall(("vDSP_DCT_CreateSetup", libacc), Ptr{Void}, 
         (Ptr{Void}, UInt64, UInt64), 
         previous, length, dct_type) 

Cette fonction alloue de la mémoire et la mémoire pour un initialise objet DFT_Setup (les détails de ce ne sont pas pertinents). La bibliothèque fournit également un destructeur appelé sur le DFT_Setup pour libérer la mémoire une fois que l'objet n'est plus nécessaire.

L'appel du destructeur est-il nécessaire dans Julia? Le garbage collector gère-t-il la libération DFT_Setup lorsque cela est approprié ou dois-je appeler le concessionnaire C?

Répondre

5

Oui, le Julia GC ne peut nettoyer que la mémoire allouée par Julia elle-même, il n'a aucune connaissance de la mémoire allouée par ccall s.

La manière habituelle de résoudre ceci est d'appeler le destructeur du finalizer, défini dans le constructeur, par ex. voir RCall.jl.

+0

Merci! Je pensais que ce serait le cas, mais j'ai pensé qu'il serait sage de vérifier. –