Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1292683
  • 博文数量: 79
  • 博客积分: 1959
  • 博客等级: 上尉
  • 技术积分: 2719
  • 用 户 组: 普通用户
  • 注册时间: 2007-11-19 12:07
个人简介

樽中酒不空

文章分类

全部博文(79)

文章存档

2024年(3)

2020年(4)

2019年(1)

2017年(2)

2016年(2)

2015年(7)

2014年(11)

2013年(13)

2012年(18)

2011年(2)

2010年(16)

分类: C/C++

2012-04-28 13:08:04

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) |
给主人留下些什么吧!~~