今天下午,经过N次的程序崩溃,终于把“机器代码注入”实现移位的方法搞好了。
写了一个简单的测试比较程序,进行了一下对比。
“算术运算模拟”直接出局,就不用它来参与了。
记得以前搜索VB6移位算法代码时,居然看到很多在“计算”时用For循环的:
移多少位,就要执行多少次乘法或除法。 狂汗…………
约在十年前,自己封装的通过算术运算来移位的模块,自己明白这种方法运行效率很低;
但受于水平限制,也没有别的办法,只能用那个。
前两天写测试对比程序,才知道这种方法的效率低得无可救药了。
这儿只比较了4种算法的,并且都以“左移位”相同的操作数和移位数来对比(实际效率跟这两个都没关系)。
其中【 ASM + CallWindowProc 】、【 机器指令注入 】、【 “轻量级”COM对象 】 的各种移位操作效率不变。
【 系统 API 】用到的系统函数只支持“单向移位”,要实现“循环移位”又得进行“组合处理”,
速度几乎又是“减半”了(跟自己的“单向移位”相比)。
测试环境的主要参数如下:
系统: Win7 旗舰版 64位 SP1
CPU: 1.7G 双核四线程(移动版 i5 - 4210U )
内存: 8G DDR3
运行效果截图:
测试代码: