Skip to content

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