挖井

类库大魔王的挖井日记

挖一口属于自己的井


又有内存泄漏

  昨天晚上,突然发现又有内存泄漏了,我真的要疯掉了。一段代码一段代码地注释掉,来查看到底是哪段代码引起泄漏的,中间又偶然发现有些情况下又没有泄漏,真是太容易迷惑人了。最后发现还是原来那段扫描文件目录并分析xml文件那个函数引起的泄漏,费了老大的劲儿。这是一种比较奇怪的现象,我到现在也没有想明白怎么会有这种情况。本来以字符串作为key插入到std::map中时,如果有重复的key,我会用clock()生成一个数字添加到key的末尾,作为一个新key,以为这样就可以保证都插入进去了。现在发现似乎还是有漏网之鱼,真是太奇怪了。不过我也不想深究这个问题了,索性遇到这种重复的情况,直接在原来的key后面添加一串比较随机的字符,并再添加一个递增的编号,这样再要有重复,我就去买彩票了。
  昨天在实现Auto Completion功能,呃,只是Lua编辑时可用。后来发现LuaForWindows中带的SciTE的一个做法可以学一下,就是可以分析出当前编辑器内的所有单词,以这些单词作为Auto Completion的列表源。于是今天想了想,这部分提取出单词的功能应该由C/C++来实现,Boost中有个Tokenizer库,刚好用来作这个事情。看了一下文档,用它自带的一个示例修改了一下测试一番,提取一个828KB的cpp文件中的所有单词,然后用STLsort算法排序,再uniqueerase一把,把重复项去除,最后再用STL中的copy算法复制到另一个vector中,总共这些操作,在VC2008中进行测试。最后发现,在Debug模式中大约在10700ms左右,Release模式则在500ms左右,近20倍的性能差异!我不知道这个比例是线性的,还是指数级的,反正证明一件事,那就是Release的确实比Debug的快很多!

本文地址:

https://minidump.info/blog/2009/12/e5-8f-88-e6-9c-89-e5-86-85-e5-ad-98-e6-b3-84-e6-bc-8f/

上一篇

当前项目进展及小结

  到昨天为止,基本完成Code Snippet的框架,剩下的都是些体力活。该特性要求在点击菜单项时,根据当前光标所在位置的字符串,替换成对应的代码片段。由于菜单项是通过插件添加实现的,而且Code Snippet又根据当前编辑的源代码对应的编程语言不同,也会有不同的处理,所以也是通过不同的插...…

CodingStudio Lua,Script Plugin Framework 全文阅读
下一篇

AST, AST, AST...

  上午花了几个小时修改了Auto Completion功能后,用起来的感觉已经超过LuaForWindows中带的SciTE了。于是又开始寻找起可以分析Lua代码并生成AST的东西,google了大半天,发现了几个Lua项目,一个ANTLR的文本,最后都可耻地放弃了!因为那些Lua项目全都由...…

Lua,Script 全文阅读