在Ruby FFI中,当我返回一个动态分配的字符串时,我应该释放它吗?

时间:2015-03-15 22:57:35

标签: ruby ffi

我在C

中有以下功能
char* strfunc()
{
   char* ch=calloc(100,1);
   strcpy(ch,"hello");
   return ch;
}

然后在红宝石中我有

module XYZ
   extend FFI::Library
   ffi_lib "mylib.so"
   attach_function :strfunc, [] , :string
end

我应该免费导入分配给返回的字符串的空闲内存吗?或者Ruby GC会为我做这个吗?

2 个答案:

答案 0 :(得分:0)

我的GUESS将是红宝石GC将照顾它。但是,这很容易让自己看到。您可以使用GC.startGC.stat来确定在GC运行时是否将释放您正在分配的对象。

答案 1 :(得分:0)

也不是FFI,也不是ruby GC会自动释放它,因为它们不知道它是malloc'd而不仅仅是一些静态内存。

您应该使用libc的free()电话手动释放它。请参考此票证https://github.com/ffi/ffi/issues/467以获取示例。