易语言实现内存池源码
.版本 2
.程序集 memPool, , 公开
.程序集变量 m_stack, stack
.程序集变量 m_license, 整数型
.程序集变量 m_unitSize, 整数型
.子程序 _初始化, , , 当基于本类的对象被创建后,此方法会被自动调用
m_license = _aligned_malloc (24, 4)
InitializeCriticalSection_ (m_license)
.子程序 _销毁, , , 当基于本类的对象被销毁前,此方法会被自动调用
DeleteCriticalSection_ (m_license)
_aligned_free (m_license)
.子程序 create, , 公开
.参数 max, 整数型, 可空, 最大 默认2048
.参数 size, 整数型, 可空, 大小 默认1024
.参数 unitSize, 整数型, , 内存大小
.局部变量 l_point, 整数型
EnterCriticalSection_ (m_license)
m_stack.create (max, size)
.如果真 (unitSize % 8 ≠ 0)
unitSize = (unitSize \ 8 + 1) × 8
.如果真结束
m_unitSize = unitSize
.变量循环首 (1, size, 1, )
l_point = _aligned_malloc (m_unitSize, 4)
.如果真 (l_point ≠ 0)
m_stack.push (l_point)
.如果真结束
.变量循环尾 ()
LeaveCriticalSection_ (m_license)
.子程序 destroy, , 公开
.局部变量 l_point, 整数型
EnterCriticalSection_ (m_license)
.判断循环首 (真)
l_point = m_stack.popup ()
.如果 (l_point ≠ 0)
_aligned_free (l_point)
.否则
跳出循环 ()
.如果结束
.判断循环尾 ()
m_stack.destroy ()
LeaveCriticalSection_ (m_license)
.子程序 free, , 公开
.参数 point
EnterCriticalSection_ (m_license)
.如果真 (取反 (m_stack.push (point)))
_aligned_free (point) ' 入栈失败 栈存满了 直接释放
.如果真结束
LeaveCriticalSection_ (m_license)
.子程序 alloc, 整数型, 公开
.局部变量 l_point, 整数型
EnterCriticalSection_ (m_license)
l_point = m_stack.popup ()
.如果真 (l_point = 0)
l_point = _aligned_malloc (m_unitSize, 4) ' 栈被取完 申请一段内存 临时顶替一下用
.如果真 (l_point = 0)
' 申请内存失败的处理 暂无
.如果真结束
.如果真结束
LeaveCriticalSection_ (m_license)
返回 (l_point)
易语言易容大师