ACE Proactor内存泄露2
来源:互联网 发布:java中策略设计模式 编辑:程序博客网 时间:2024/05/24 06:58
进一步深入ACE的源代码发现,所谓的内存泄露的根本原因是在ACE_Asynch_Acceptor<HANDLER>::open函数中,在open函数中,有如下代码
for (int i = 0; i < number_of_initial_accepts; i++)
// Initiate accepts.
if (this->accept (bytes_to_read) == -1)
ACE_ERROR_RETURN ((LM_ERROR,
"%p/n",
"ACE_Asynch_Acceptor::accept"),
-1);
具体的accept的实现如下,
ACE_TRACE ("ACE_Asynch_Acceptor<>::accept");
ACE_Message_Block *message_block = 0;
size_t space_needed = bytes_to_read + 2 * this->address_size ();
// Create a new message block big enough for the addresses and data
ACE_NEW_RETURN (message_block,
ACE_Message_Block (space_needed),
-1);
// Initiate asynchronous accepts
if (this->asynch_accept_.accept (*message_block,
bytes_to_read,
ACE_INVALID_HANDLE,
act) == -1)
{
// Cleanup on error
message_block->release ();
return -1;
}
return 0;
也就是说,在open的过程中,创建了number_of_initial_accepts个message_block,大小为number_of_initial_accepts,
这些message_block是动态分配的,如果接受了一个新的连接,将把现在的message_block->release,并再分配一个bytes_to_read大小的message_block,因此始终存在一个或若干个动态分配的message_block,问题是在程序结束的时候并没有将这些message_block进行释放,因此造成功了内存泄露的情况,但这是一次性的,程序运行过程中不会出现新的内存泄露,看来要解决这个问题,1,可以分配一定数量一定大小的message_block,循环使用,在析构函数中并记得释放,2,简单一点可以增加个变量,记录这些动态分配的message_block,在析构函数中并记得释放
- ACE Proactor内存泄露2
- ACE Proactor内存泄露问题1
- ACE proactor
- ACE Proactor
- ACE示例 - ACE Proactor
- ACE示例3 - ACE Proactor
- ACE示例3 - ACE Proactor
- ACE proactor example
- ACE前摄器Proactor模式
- ACE Proactor框架
- ACE前摄器Proactor模式
- ACE前摄器Proactor模式
- ACE Proactor模式
- ACE前摄器Proactor模式
- ACE proactor example
- ACE前摄器Proactor模式
- ACE proactor example
- ACE前摄器Proactor模式
- MFC设置字体及颜色
- Change the background color of the header of a List Control
- MFC 中的CListCtrl简介
- 修改TEST_UDP_PROACTOR不能连续接受客户数据的问题
- ACE Proactor内存泄露问题1
- ACE Proactor内存泄露2
- Implementation Repository测试说明
- C#中对 XML节点进行添加,删除,查找和删除操作
- TinyXML简单应用
- VC2005设置Debug内存泄露检查
- VMDq (Virtual Machine Device Queue) in OpenSolaris
- 网络端口状态的表示与其含义
- C/C++笔试系列--经典C++笔试题解析5
- 开源日志系统 - log4cplus (一)