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

In Ruby FFI when I return a dynamically allocated string should I free it?

我在C中有以下函数

char* strfunc()
{
   char* ch=calloc(100,1);
   strcpy(ch,"hello");
   return ch;
}

然后在 ruby 我有

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

我应该将 free 导入分配给返回的字符串的 free 内存还是 Ruby GC 会为我做这件事?

我猜 ruby GC 会处理它。然而,你自己真的很容易看到。您可以使用 GC.start and GC.stat 来确定您正在分配的对象是否会在 GC 运行时被释放。

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

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