ffi.gc
ガベージコレクションでメモリを解放するための関数を登録する
lua
ffi.gc(cdata, finalizer)
説明
ffi.gc
関数は、指定した cdata
オブジェクトにファイナライザ(解放時に実行される関数)を設定します。これにより、ガベージコレクタが cdata
オブジェクトを解放する際に、自動的にリソースが解放されるようになります。
補足
- ファイナライザは、
cdata
オブジェクトの参照がなくなった際に、__gc
メタメソッドのように自動で呼び出されます。 - 既存のファイナライザを削除したい場合は、
ffi.gc(cdata, nil)
を指定して手動でリソースを解放します。
サンプルコード
lua
local ffi = require("ffi")
local p = ffi.gc(ffi.C.malloc(100), ffi.C.free)
-- `p` がガーベージコレクトされると `ffi.C.free` が自動で呼び出される
このコードは、動的に確保されたメモリをガーベージコレクタで自動解放するように設定しています。
互換性
- LuaJIT
関連項目
- ffi.new