易语言资源网 - 做最全的易语言资源下载社区
精易论坛授权登录

通用哈希表,简化操作和函数,修复原版内存泄露   [复制链接]

    2021-01-08 09:25:30
    模块控件源码
    易语言资源网
    3872 次浏览
    来源链接

通用型哈希表,最早发出的哥们儿已经不知去向(感谢他),目前的更新和优化好像都是酷宝贝在做,不过我经常要导入模块,所以一直想用一个不需要类直接复制粘贴程序集就能用的版本,经过一段时间打磨,总算自己写了一个,调试过程还是有不少曲折的,但是考虑到易语言都过了二十年了,知名度依旧不高,所以没什么好吝啬的,分享出来,人海茫茫,你能碰到的都是兄弟,不是竞争对手。

碰巧写TCP组包,考虑用哈希表存储数据,这也引出了 将原先的哈希读写拆分出 取指针 和 指针操作 的需求。

这个程序集的特点:

' 分层次展现

' 中文函数(公开)为哈希表主要函数

' 中文函数(未公开)为哈希表扩展功能函数

' 英文函数为独立的工具函数

' 带_的英文函数是哈希表的附属函数

' 1.对于取哈希值的算法进行了扩展,变成4种

' 2.增加了CRC32_PTR汇编算法,使用查表方式计算,速度与按字节计算的传统哈希相近,比RtlComputeCrc32快且兼容性强,比传统的哈希算法碰撞率低

' 3.增加了hash_PTR汇编算法,按字节计算哈希结果和之前一样,按字和按3字计算可用于文本key(但要注意对齐,比如Unicode是字对齐)

' 4.增加了 哈希_更改 子程序,这是将key作为handle使用,用于快速管理资源的一种理解方式

' 5.在哈希取值之前分离出 哈希_取指针,返回数据的内存地址,同时让哈希_取值命令更加简单易读

' 6.增加了 取素数不小于 的函数,用于创建和扩展链表,最早的创建方式不科学,遇到有规律的数会产生严重碰撞

' 7.修复了内存泄露的bug,具体位置在 哈希_添加 中找到相同key数据之后,补充了heapfree命令

' 8.更改取值方式,这个我看到酷宝贝也改了,取值直接返回指针,而不是再度申请内存(该操作同样会泄露)

阐述一下CRC32_PTR,综合考量了速度、资源占用,将表作为数据置入,用CALL/POP取出,比API快,已对比过各易论坛、资源网、目前是最快最稳定的,欢迎高手拍砖!




点我下载 (已有 204 次下载)

引用模块





引用支持库


源码文件名 支持库文件名 支持库标识
hashtable(改1).e 系统核心支持库 5.7 d09f2340818511d396f6aaf844c7e325


[错误报告]   上一篇:GDIPlus绘制_消息右侧上移提示...     下一篇:汇编源码修复BUG,再新增分享汇编取pn...