为编程爱好者分享易语言教程源码的资源网

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

易语言实现内存池源码

三叶资源网 2019-06-04 09:08:16 易语言例程 1928 ℃ 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
代理注册采集源码代理服务器源码炫彩设计器工程易语言纯画板动态加解密软件支付宝PC微信易LOGO支持库系统DPI缩放率获取拼多多指定店铺商品详情源码GIF表情包制作书法HP端口转发图片转PDF助手支持库教程百度登录微博降权AES加密
最新评论