怎样在vc2010中编译lua文件

摘要: 有人写过相同的文章貌似,在Tools/Extenal Tools做设置。这里讲另外一点小技巧,当vc编译文件出错,双击出错的行就可以快速定位到文件和行,但是用lua编译的输出格式vc无法识别。所幸lua的代码在手,改动简单1. 搜索%s:%d: %s 改为%s:(%d): %s2. 改lua.c的l_message if (pname) fprintf(stderr, "%s: \n", pname); --加个\n3. 在main的最后加上 report(L, status); if (status == 0) printf("ok !");这样如果编 阅读全文
posted @ 2011-10-18 12:20 风行水上 阅读(794) 评论(0) 推荐(0) 编辑

网游拓扑之网关

摘要: 很多知识也是最近才领会到,如果不对,请行家指正。在posix下在网游的前端开多个网关是常用的事情,而在windows下往往一个就好,甚至不用,为什么呢?posix的网关基于libevent的模型,虽然io是block的,但是他是单线程的,所以发挥不了多cpu的作用,所以fork出多个是个办法。网关还有另一个作用,对包进行编码和解码,甚至压缩加解密,这些都比较耗cpu。而在windows下使用iocp,windows会自动的启动多个线程(cpu * 2)来做recieve,就相当于多个网关;而对于发送,常见的做法也是开一个send线程(不要笑话我在windows下做服务器,以前确实没有启蒙,土法 阅读全文
posted @ 2011-10-17 22:51 风行水上 阅读(273) 评论(0) 推荐(0) 编辑

STL container 容易发作的bug

摘要: STL中,container和其iterator是正交的,我们操作iterator的时候不知道container。而在具体的程序中,两者却往往有相交性,比如常见的bug就是在itertator的遍历中又修改了container(常见于观察者模式),STL不检查这个,而因为其正交性,这种bug很难发现和定位,又是undefined behavor,往往导致事后错误,更加错的无迹可寻。简单的,把container和其iterator封装在一起就可以解决(应该说是更早的发现而不是解决)这样的问题。简单举个例template <typename C>class LoopSafeContai 阅读全文
posted @ 2011-10-12 15:29 风行水上 阅读(219) 评论(0) 推荐(0) 编辑

embed python如何得知python占用的内存呢?

摘要: 答案是:不可知的。这就是embed python不如lua的地方,lua不仅可以通过collectgarbage("count")来得到占用内存还可以传入自定义的lua_Alloc函数分配器:lua_State *lua_newstate (lua_Alloc f, void *ud);embed python只能去感知他占用的内存大小,比如在程序退出时,把自己的对象全部销毁了,剩下的大概就是python占用的内存。如果就此止步不是我们的风格,我们直接重写malloc和freeint g_py_malloc = 0;PyAPI_FUNC(int) py_get_memory 阅读全文
posted @ 2011-09-28 17:26 风行水上 阅读(668) 评论(0) 推荐(0) 编辑

操作sqlserver 抛出异常 CMemoryException

摘要: 恭喜一下自己,还在内存中打转;并且短时间出不来了。说打开sqlserver就发现内存一直涨没有停下来的势头,怀疑是sqlserver有内存泄露——其实这是sqlserver的机制,只要内存不大于设定的最大内存,sqlserver就不释放。那么为什么会出现CMemoryException?打开资源管理器,注意到此时sqlserver占1.6G,远程管理占700M,windows自身占1G,本身的数据代理程序也有500M,加起来也有接近4G了。一般的数据库服务器上不要开其他程序,如果开的话,设定一下sqlserver的最大内存(sqlserver为什么无法自适应呢?)。当然,简单的方法是把内存扩到 阅读全文
posted @ 2011-09-27 23:20 风行水上 阅读(838) 评论(0) 推荐(0) 编辑

使用perfmon来找内存泄露

摘要: 这里再讲一个故事,也是发生在最近,大家可能不相信,perfmon怎么能找到内存泄露呢?一般的,看内存泄露是通过taskmanager,一般的看内存占用等价于private bytes,见http://stackoverflow.com/questions/1984186/what-is-private-bytes-virtual-bytes-working-set看到private bytes很有规律的变化,为了看出规律要祭出另一件法器perfmon,看见每隔一个周期会很有规律的增加200k;开始以为一个周期是1分钟,立刻想到底层文件的管理上去了,他是每分钟清除不常用到的文件;后来发现perf 阅读全文
posted @ 2011-09-19 23:40 风行水上 阅读(1037) 评论(0) 推荐(0) 编辑

不是内存泄露的内存泄露

摘要: 内存泄露这个故事,一不小心就讲了好久回了。起因就是因为朋友的一个项目出现这个问题,帮忙想办法,今天可能算是结束了,就总结一下。首先讲个自己的故事,为了效率,写了个内存分配器。这里有所简化:std::multimap<size_t,void*> m_frees;void* memory_large::alloc(size_t size){ memory_map::iterator it = m_frees.lower_bound(size); if (it == m_frees.end()) return new char[size]; void* p = it-... 阅读全文
posted @ 2011-09-17 22:42 风行水上 阅读(313) 评论(0) 推荐(0) 编辑

使用UMDH来查找内存泄露

摘要: 我在vs2010使用vld2.2没有问题,但是朋友的vs2003就问题一堆,不兼容啊。并且vld有段时间没有维护了。记得在stackoverflow看过文章http://stackoverflow.com/questions/25730/what-is-the-best-free-memory-leak-detector-for-a-c-c-program-and-its-plug-in-dl里面有人提到了UMDHhttp://msdn.microsoft.com/en-us/library/ff560206%28VS.85%29.aspx照着做一个测试,(需要安装windows sdk,里面 阅读全文
posted @ 2011-09-14 23:37 风行水上 阅读(1090) 评论(0) 推荐(0) 编辑

Subst在持续集成(CI)中的用处。

摘要: 在windows的CI中,pdb和源代码是同等重要的东西,失去pdb就无法做事后调试了;但是pdb讨厌的地方在于,他的源代码的路径是定死的没有重新设置的机会,而CI的机器跟你的机器的路径往往又不一致。在vs中设置source路径是一个方法,但是对于不同版本的pdb,往往需要根据版本来get source进行调试,所以subst就起作用了,在CI的机器上,把编译目录subst到一个盘(比如Z:),来编译,那么pdb代码路径都是Z:\下了,当本机调试pdb的时候,get source之后subst到Z:,就可以找到源代码了。今天翻dos命令偶然翻到subst,当然该方法并非原创,看来的,只是原来的 阅读全文
posted @ 2011-09-14 09:46 风行水上 阅读(217) 评论(0) 推荐(0) 编辑

用vld动态的分析memory leak(内存泄露)

摘要: 有没有这样的情况,无法静态的通过启动和退出来查找内存泄露,比如网络游戏,你总不能直接关游戏那玩家怎么办? 现在vld支持release,我们可以动态的找。1.在release版本使用vld了。#define VLD_FORCE_ENABLE#include<vld.h> 2.支持gm命令来开启和关闭vld,并且report__declspec(dllimport)void VLDDisable ();__declspec(dllimport)void VLDEnable ();__declspec(dllimport)UINT VLDReportLeaks ();3. 修改一下vl 阅读全文
posted @ 2011-09-13 12:03 风行水上 阅读(1275) 评论(0) 推荐(0) 编辑