gnugo3.8的代码比较少,接口也非常简单,几个api函数就可以完成人机对战,或人人对站,或sgf打谱,但是,在内存管理上还有可以完善的地方。
void
reading_cache_init(int bytes)
{
tt_init(&ttable, bytes);// malloc(num_entries * sizeof(table->entries[0]));
}
void
reading_cache_clear()
{
tt_clear(&ttable);//memset(table->entries, 0, table->num_entries * sizeof(table->entries[0]));
}
很明显,内存没有释放。
还有,
persistent_cache_init()
{
init_cache(&reading_cache);
}
init_cache(struct persistent_cache *cache)
{
cache->table = malloc(cache->max_size*sizeof(struct persistent_cache_entry));
gg_assert(cache->table);
}
clear_persistent_caches()
{
reading_cache.current_size = 0;
}
gnugo作者是在Linux下完成的,在windows下也是命令行程序,按他的设计思路,第三方UI通过CreateProcess启动gnugo,下完棋后虽然主界面还在,但后台已经结束该进程,系统帮助回收内存,所以没有问题。如果把gnugo做成lib或dll,就有隐患了。这两个地方比较明显,下完棋free掉就可以了。不过,在genmove内还有可能产生内存问题。需要仔细debug。
阅读(2941) | 评论(0) | 转发(0) |