Essa memória de código Vala vazará quando criada como biblioteca compartilhada (.so)?
Vala:
namespace test {
public static string info(string name){
return "Hello " + name;
}
}
Código fonte (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;
}
Compilação: valac --library=test -H test.h "test.vala" -X -fPIC -X -shared -o test.so
Estou surpreso com nenhuma desalocação de memória em test_info
.
- Vai
g_strconcat
armazenar memória alocada na variável global (possível thread-local)? - Haverá vazamento de memória se eu ligar
test_info
do programa externo mil vezes, sem desalocação?
Sinto muito por esta possível pergunta simples, mas sou novo em Vala (minha experiência principal na área de Go, Python, C ++ e etc)
Respostas:
2 para resposta № 1Seu código retornará um possuído para que o responsável pela chamada seja responsável pela desalocação de memória.
Se você chamar essa função de biblioteca da vala, o compilador garantirá que ela seja desalocada.
Se você ligar de C
você deveria ler o Documentação GLib para g_strconcat:
Concatena todas as seqüências de caracteres fornecidas em uma sequência longa. o A string retornada deve ser liberada com g_free () quando não for mais necessário.
Eu recomendo que você leia:
Veja também essa questão (que é sobre Genie, Valas "língua irmã" embora).