1

ここに簡単な質問があります。この Vala コードのメモリ リークを見つけるのを手伝ってくれませんか? それが役立つ場合は、生成された C コードも投稿できます ^^

using GLib;
using Gtk;
using Gee;

void test1 () 
{
    Gee.ArrayList<Gdk.Pixbuf> list = new Gee.ArrayList<Gdk.Pixbuf>();

    for( int a = 0; a < 10000; a++)
    {
        string path = "/usr/share/icons/gnome/48x48/stock/data/stock_lock.png";

        list.add( new Gdk.Pixbuf.from_file( path ) );
    }

    list.clear(); 

    // when the function returns it *should* free all alocated memory, or am I missing something?            
}

int main (string[] args) 
{
    Gtk.init( ref args);

    // the memory usage here is ~3mb
    test1();
    // here it is ~94mb

    Gtk.main();
    return 0;
}
4

1 に答える 1

1

Vala の最新バージョン (0.10.1 および 0.11.1) でこれを再現しました。valac が生成する .c コードを調べましたが、明らかな問題は見当たりませんが、pixbufs がリークしていることは明らかです (valgrind はこれを確認しています)。ここでバグとして報告しました:

https://bugzilla.gnome.org/show_bug.cgi?id=633869

更新: バグはクローズされました。調査によると、メモリ リーク自体はありませんが、(ほとんどの場合) サブアロケータなどによってメモリが解放されたときに、メモリが割り当てられて保持されていることが示されています。Evan が指摘したように、テスト関数をループで呼び出した場合、合計メモリ サイズが 90MB を超えることはなく、これはメモリ リークではないことを示しています。

于 2010-11-03T01:11:08.860 に答える