Нужно ли запускать уничтожение последней ссылки на переменную, созданную с помощью ffi.gc() из Python-CFFI?

Читайте в документации Python CFFI:

Интерфейс основан на FFI LuaJIT (...)

Читайте на сайте LuaJITffi.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 не поддерживает объект в живых. Это бессмысленно (за исключением особых случаев), если, например, это одна из последних функций, выполняемых в этой функции. Вам это не нужно больше, чем нужно для освобождения, скажем, переменной, которая будет содержать обычный строковый объект.

Другие вопросы по тегам