大家来谈谈大缓存区字节翻转的算法

hecaptain 发布于 2013/08/13 14:50
阅读 168
收藏 0

大概100M的缓存区,要求得到翻转后的buf,即dest[end-i] = src[firt+i]

直接copy的方法首先就被淘汰,效率上太慢

想到每2,4,8字节翻转一次,copy一次

2字节:  y = (x2>>8) | (x2<<8);

4字节:  x = ((x<<8)&0xFF00FF00) | ((x>>8)&0x00FF00FF);
            y = (x>>16) | (x<<16);

8字节:  x = ((x<<8)&0xFF00FF00FF00FF00) | ((x>>8)&0x00FF00FF00FF00FF);
            x = ((x<<16)&0xFFFF0000FFFF0000) | ((x>>16)&0x0000FFFF0000FFFF);
            y = (x>>32) | (x<<32)


大致核心就是每2/4/8的翻转算法

通过测试发现,4字节的效率是最高的,可能因为unsigned long long不是基本数据类型或者((x<<8)&0xFF00FF00FF00FF00) | ((x>>8)&0x00FF00FF00FF00FF)的效率问题。

汇编没尝试过

大家看看还有什么更好的方法没?



加载中
返回顶部
顶部