从头再来

#

libevent & boost:asio

开始学习使用这二种技术的服务器端开发

posted @ 2011-10-29 21:20 易宝@byhh 阅读(1466) | 评论 (0)编辑 收藏

STL窗口使用_list

继续之前的项目。跑录像的时候,本地测试为2G内存的机器,效果还行。没有出现挂掉的现象。

但把代码重新编译在外面跑的时候就出现了段错误,double free list_node_base nohook .一类的gdb信息。

后询问大牛,得知应该是list的迭代器失效引起。


经检查,的确如此。。

有一段类似于以下代码

for(i = list.begin(); i !=list.end();i++)
{
   if ( (*) == p)
   {
   }
}

之前有加锁。后来使用了新的加锁方法,、把链表的每一次操作加锁,而不是全部加锁,

也就是list.end(),并不是调用STL的end() 而是先lock 再调再unlock 自己进行了一次类的封装操作。

由于这个影响,导致多线程在判断的时候。有可能会有二个传入的值同时被判断,其中一个over这后顺利进行。另外一个再进行操作。就段错误。

奇怪的是同样二个机器同时测试。就一个出来了错误。。。想来是小错误。很少会碰到。double free 的情况和原生代码杂乱也有一定关系

posted @ 2011-06-02 21:25 易宝@byhh 阅读(258) | 评论 (0)编辑 收藏

对内存处理时的一些错误与理解


把之前的项目中的new 与delete进行了替换,使用缓存池来维护获取到的内存块指针。


发现如下问题。

一、原代码中使用多线程结构,有部分指针被多次delete.
二、服务端,客户端数据压力大,使用200路时,内存消耗达到700M/240M ,数据使用大起大落,走到后面死掉

100路时跑一晚上暂无问题


内存池本身问题: 加锁设计不够,向系统申请时并未加锁,导致多个线程同时申请多块内存。

posted @ 2011-05-31 22:20 易宝@byhh 阅读(185) | 评论 (0)编辑 收藏

内存池

今天拿到一个project 在看。其中的问题就在于多次申请与释放内存,导致到后期malloc会失败。


最方便的解决办法就是做一个内存管理层,接管系统的内存调用函数,使用内存管理的方式,一次申请,一次释放。


有两种做法,一个是用一个list来维护全部的数据


另外一个是用两个list来维护,其中一个是被应用程序使用的内存区,其中一个是已经申请,尚未使用或者被应用程序释放的区块。


freelist usedlist 


list 大小固定(对于目前的应用场合)

posted @ 2011-05-25 15:44 易宝@byhh 阅读(245) | 评论 (0)编辑 收藏

仅列出标题
共3页: 1 2 3