构建共享库时 Vala 内存泄漏吗?
Has Vala memory leak when building shared library?
这个Vala代码构建为共享库(.so)时会不会内存泄漏?
瓦拉:
namespace test {
public static string info(string name){
return "Hello " + name;
}
}
源代码(valac -C
)
gchar* test_info (const gchar* name) {
gchar* result = NULL;
const gchar* _tmp0_ = NULL;
gchar* _tmp1_ = NULL;
g_return_val_if_fail (name != NULL, NULL);
_tmp0_ = name;
_tmp1_ = g_strconcat ("Hello ", _tmp0_, NULL);
result = _tmp1_;
return result;
}
编译:valac --library=test -H test.h "test.vala" -X -fPIC -X -shared -o test.so
我对 test_info
中没有内存重新分配感到惊讶。
g_strconcat
会将分配的内存存储在全局变量中(可能是线程本地的)吗?
- 如果我从外部程序多次调用
test_info
而不释放内存,会发生内存泄漏吗?
对于这个可能的简单问题,我很抱歉,但我是 Vala 的新手(我在 Go、Python、C++ 等领域的主要经验)
您的代码将 return 一个 拥有的 字符串,因此调用者负责内存释放。
如果您从 vala 调用此库函数,编译器将确保它已被释放。
如果您从 C
调用它,您应该阅读 GLib documentation for g_strconcat:
Concatenates all of the given strings into one long string. The
returned string should be freed with g_free() when no longer needed.
我建议您阅读:
另见 (不过是关于 Genie,Valas "sister language")。
这个Vala代码构建为共享库(.so)时会不会内存泄漏?
瓦拉:
namespace test {
public static string info(string name){
return "Hello " + name;
}
}
源代码(valac -C
)
gchar* test_info (const gchar* name) {
gchar* result = NULL;
const gchar* _tmp0_ = NULL;
gchar* _tmp1_ = NULL;
g_return_val_if_fail (name != NULL, NULL);
_tmp0_ = name;
_tmp1_ = g_strconcat ("Hello ", _tmp0_, NULL);
result = _tmp1_;
return result;
}
编译:valac --library=test -H test.h "test.vala" -X -fPIC -X -shared -o test.so
我对 test_info
中没有内存重新分配感到惊讶。
g_strconcat
会将分配的内存存储在全局变量中(可能是线程本地的)吗?- 如果我从外部程序多次调用
test_info
而不释放内存,会发生内存泄漏吗?
对于这个可能的简单问题,我很抱歉,但我是 Vala 的新手(我在 Go、Python、C++ 等领域的主要经验)
您的代码将 return 一个 拥有的 字符串,因此调用者负责内存释放。
如果您从 vala 调用此库函数,编译器将确保它已被释放。
如果您从 C
调用它,您应该阅读 GLib documentation for g_strconcat:
Concatenates all of the given strings into one long string. The returned string should be freed with g_free() when no longer needed.
我建议您阅读:
另见