/ / A memória Vala vazou ao criar a biblioteca compartilhada? - c, glib, vala

Tem vazamento de memória Vala ao construir biblioteca compartilhada? - c, glib, vala

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 № 1

Seu 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).