内联汇编的快速CRC32

typedef unsigned __int64 QWORD;

class  CCrc32Static
{
public:
    CCrc32Static()
{};
    
virtual ~CCrc32Static(){};
    
static DWORD StringCrc32(LPCTSTR szString, DWORD &dwCrc32);
    
static DWORD FileCrc32Assembly(LPCTSTR szFilename, DWORD &dwCrc32);
protected:
    
static inline void CalcCrc32(const BYTE byte, DWORD &dwCrc32);
    
static DWORD s_arrdwCrc32Table[256];
}
;

#define  MAX_BUFFER_SIZE 4096
// #define MAKEQWORD(a, b) ((WORD)(((BYTE)((DWORD_PTR)(a) & 0xffffffffffffffff)) | ((WORD)((BYTE)((DWORD_PTR)(b) & 0xffffffffffffffff))) << 64))
    //Powered by barenx
// #define INVALID_HANDLE_VALUE ((HANDLE)(-1))   
//  Static CRC table
DWORD CCrc32Static::s_arrdwCrc32Table[ 256 =
{
    
0x000000000x770730960xEE0E612C0x990951BA,
        
0x076DC4190x706AF48F0xE963A5350x9E6495A3,
        
0x0EDB88320x79DCB8A40xE0D5E91E0x97D2D988,
        
0x09B64C2B0x7EB17CBD0xE7B82D070x90BF1D91,
        
0x1DB710640x6AB020F20xF3B971480x84BE41DE,
        
0x1ADAD47D0x6DDDE4EB0xF4D4B5510x83D385C7,
        
0x136C98560x646BA8C00xFD62F97A0x8A65C9EC,
        
0x14015C4F0x63066CD90xFA0F3D630x8D080DF5,
        
0x3B6E20C80x4C69105E0xD56041E40xA2677172,
        
0x3C03E4D10x4B04D4470xD20D85FD0xA50AB56B,
        
0x35B5A8FA0x42B2986C0xDBBBC9D60xACBCF940,
        
0x32D86CE30x45DF5C750xDCD60DCF0xABD13D59,
        
0x26D930AC0x51DE003A0xC8D751800xBFD06116
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
通用型哈希表,最早发出的哥们儿已经不知去向(感谢他),目前的更新和优化好像都是酷宝贝在做,不过我经常要导入模块,所以一直想用一个不需要类直接复制粘贴程序集就能用的版本,经过一段时间打磨,总算自己写了一个,调试过程还是有不少曲折的,但是考虑到 易语言 都过了二十年了,知名度依旧不高,所以没什么好吝啬的,分享出来,人海茫茫,你能碰到的都是兄弟,不是竞争对手。 碰巧写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快,已对比过各易论坛、资源网、目前是最快最稳定的,欢迎高手拍砖!

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值