为编程爱好者分享易语言教程源码的资源网
好用的代理IP,游戏必备 ____广告位招租____ 服务器99/年 ____广告位招租____ ____广告位招租____ 挂机,建站服务器
好用的代理IP,游戏必备 ____广告位招租____ 服务器低至38/年 ____广告位招租____ ____广告位招租____ 挂机,建站服务器

网站首页 > 易语言相关 > 易语言例程 正文

易语言实现内存池源码

三叶资源网 2019-06-04 09:08:16 易语言例程 1831 ℃ 1 评论

易语言实现内存池源码

@血色娱乐

.版本 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)
文件下载

来源:三叶资源网,欢迎分享,公众号:iisanye,(三叶资源网⑤群:21414575

已有1位网友发表了看法:

欢迎 发表评论:

百度站内搜索
关注微信公众号
三叶资源网⑤群:三叶资源网⑤群

网站分类
随机tag
QuotedJS教程QQ群发递归反跟踪鼠标源码薅羊毛数学函数图像Client易代码编辑框微博引流创建时钟找色下载器软件销毁时钟QQ空间协议UI界面线程池组合框拼接
最新评论