首页 > 解决方案 > 将最后 N 个字节移动到数组开头的最快方法?

问题描述

给定一个 8 字节数组(它总是 8 字节)

1 2 3 4 5 6 7 8

pos0 到 7 之间的参数

改变数组可能会导致:

[pos 0] 1 2 3 4 5 6 7 8
[pos 1] 2 3 4 5 6 7 8 1
[pos 2] 3 4 5 6 7 8 1 2

因为我们从元素 at 开始pos,如果我们没有元素,我们会循环回到数组的开头以获取下一个元素

X86 上创建结果数组的最快方法是什么?

背景:

这是一个滚动密钥,它是网络协议的混淆算法的一部分(后来它是对数据等的一些 XOR 操作的一部分)。
必须将协议实现为客户端,但我无法更改原始算法。
正在处理大量网络流量,算法在循环中逐字节处理它们,同时还修改密钥,这很慢。
目标是一次处理 8 个字节,从而减少开销。
拥有正确的 8 字节密钥,我稍后可以仅使用一条指令将 8 字节网络数据“异或”。

标签: c++performanceassemblyx86

解决方案


推荐阅读