C标准库中,memcpy和memset是我们经常要使用的函数。这两个函数分别可以复制内存区域和将内存区域以指定值填充。虽然这两个函数在VC中都是由VC编译器自行优化,但是在处理大型数据时速度还是不尽人意。
  然而,现在的CPU都带有MMX指令集和SSE指令集,这两个指令集分别可以以一条指令一次性处理64位和128位的数据。将其用于memcpy和memset函数,速度将会有很大提升。
  下面进行一次对比测试。
  测试方法:分别申请两个内存块buf1和buf2,大小为50MBytes。将buf2使用memset进行清0,然后用memcpy把buf1的数据复制到buf2。分别用memcpy/memset、mmx_memcpy/mmx_memzero、sse_memcpy/sse_memzero进行比较。
  测试环境:
    CPU:AMD Athlon 64 X2 Core 5000+
    内存:DDR2 667 1G * 2
    操作系统:Windows Server 2008 x86 sp2
  测试结果:(单位毫秒)
1. normal: 91.841360 / mmx: 68.792000 / sse: 69.324840
2. normal: 96.577960 / mmx: 74.344080 / sse: 69.270520
3. normal: 98.404240 / mmx: 70.301040 / sse: 69.310760
4. normal: 95.738160 / mmx: 71.772560 / sse: 73.962080
5. normal: 95.275720 / mmx: 73.187120 / sse: 70.472120

下附mmx和sse的memcpy和memzero的源代码,使用masm32编译,lib库可以用于vc。

源代码和库下载:
LoginRegister查看剩下的内容。

旧版RO登陆器在Win8和虚拟机中启动后只显示小窗的解决办法

RO的Setup配置程序在Windows8和虚拟机中,无法获得可用分辨率,即分辨率下拉框为空。为此导致一些旧版的登陆器启动后只显示一个很小的窗口,无法进行游戏。现...

阅读全文

1 条评论

欢迎留言