1 Star 0 Fork 68

K./socket

forked from beykery/cocosocket 
加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
克隆/下载
MemoryPool.cpp 2.02 KB
一键复制 编辑 原始数据 按行查看 历史
beykery 提交于 2014-01-09 19:39 . fdf
#include "MemoryPool.h"
MemoryPool::MemoryPool(unsigned int size, unsigned int increase /*= 64*/)
{
m_size = size;
m_increase = increase;
MemoryList *list = (MemoryList*) malloc(sizeof (MemoryList));
m_handle = (MemoryList*) malloc(sizeof (MemoryList));
if (list == NULL || m_handle == NULL)
{
return;
}
list->memory = malloc(size);
m_memory_list_header = list;
MemoryList *handle = NULL;
for (unsigned int i = 1; i < m_increase * 2; ++i)
{
handle = (MemoryList*) malloc(sizeof (MemoryList));
handle->memory = malloc(size);
list->next = handle;
list = list->next;
}
list->next = NULL;
}
MemoryPool::~MemoryPool()
{
MemoryList *handle = NULL;
while (m_memory_list_header->next != NULL)
{
handle = m_memory_list_header;
m_memory_list_header = m_memory_list_header->next;
free(handle);
}
}
void * MemoryPool::Alloc()
{
static void * handle = NULL;
if (m_memory_list_header->next == NULL)
{
MemoryList *handle = NULL;
MemoryList *list = (MemoryList*) malloc(sizeof (MemoryList));
if (list == NULL)
{
return NULL;
}
list->memory = malloc(m_size);
m_memory_list_header->next = list;
for (unsigned int i = 1; i < m_increase; ++i)
{
handle = (MemoryList*) malloc(sizeof (MemoryList));
if (handle == NULL)
{
break;
}
handle->memory = malloc(m_size);
list->next = handle;
list = list->next;
}
list->next = NULL;
}
handle = m_memory_list_header->memory;
m_memory_list_header = m_memory_list_header->next;
return handle;
}
void MemoryPool::Free(void *m)
{
if (m == NULL)
{
return;
}
if (m_handle == NULL)
{
m_handle = (MemoryList*) malloc(sizeof (MemoryList));
}
m_handle->memory = m;
m_handle->next = m_memory_list_header;
m_memory_list_header = m_handle;
}
马建仓 AI 助手
尝试更多
代码解读
代码找茬
代码优化
1
https://gitee.com/stanjo/socket.git
[email protected]:stanjo/socket.git
stanjo
socket
socket
master

搜索帮助