Нужно ли запускать уничтожение последней ссылки на переменную, созданную с помощью ffi.gc() из Python-CFFI?
Читайте в документации Python CFFI:
Интерфейс основан на FFI LuaJIT (...)
Читайте на сайте LuaJIT (о ffi.gc()
):
Эта функция позволяет безопасно интегрировать неуправляемые ресурсы в автоматическое управление памятью сборщика мусора LuaJIT. Типичное использование:
local p = ffi.gc(ffi.C.malloc(n), ffi.C.free)
...
p = nil -- Last reference to p is gone.
-- GC will eventually run finalizer: ffi.C.free(p)
Итак, используя Python-CFFI, нужно ли запускать уничтожение последней ссылки на переменную, созданную с помощью ffi.gc
(= для этого требуется специальная функция для освобождения, потому что некоторые ее части выделяются динамически), установив ее в (то есть) ffi.NULL
?
1 ответ
Python спроектирован таким образом, что все объекты собираются для мусора, как только на него больше нет ссылок (или вскоре после этого), как и любой другой язык для сбора мусора (включая Lua). Хитрость настройки p = None
явно (или del p
) просто убедится, что эта локальная переменная p
не поддерживает объект в живых. Это бессмысленно (за исключением особых случаев), если, например, это одна из последних функций, выполняемых в этой функции. Вам это не нужно больше, чем нужно для освобождения, скажем, переменной, которая будет содержать обычный строковый объект.