c++ - 将短数组向下转换为 char 的最快方法

标签 c++ performance

我必须每秒处理大约 2000、100 个元素数组。这些数组以短裤的形式出现,带有高位数据,需要移位并转换为字符。这是我能得到的最有效的方法,还是有更快的方法来执行此操作? (我必须跳过其中的 2 个值)

for(int i = 0; i < 48; i++)
{
    a[i] = (char)(b[i] >> 8);
    a[i+48] = (char)(b[i+50] >> 8);
}

最佳答案

即使移位和按位运算很快,您也可以尝试将短数组作为 char 指针处理,正如其他评论中所建议的那样。它是每个标准都允许的,并且对于常见的体系结构,它会做预期的事情 - 留下了字节序问题。

因此您可以先尝试确定字节顺序:

bool isBigEndian() {
    short i = 1;   // sets only lowest order bit
    char *ix = reinterpret_cast<char *>(&i);
    return (*ix == 0);   // will be 1 if little endian
}

你的循环现在变成了:

int shft = isBigEndian()? 0 : 1;
char * pb = reinterpret_cast<char *>(b);
for(int i = 0; i < 48; i++)
{
    a[i] = pt[2 * i + shft];
    a[i+48] = pt[2 * i + 50 + shft];
}

但与往常一样,对于低级优化,这必须使用将在生产代码中使用的编译器和编译器选项进行基准测试。

关于c++ - 将短数组向下转换为 char 的最快方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36344181/

相关文章:

c++ - 将静态常量类实例用于开关/案例

c++ - 来自抽象类的 unique_ptr 的 shared_ptr

java - JNI 什么时候需要复制原始类型的数组?

html - 在 Chrome 上将 drawImage 与 Canvas 一起使用非常慢

javascript - 在对象数据上调用原型(prototype)函数,同时最小化内存使用

c++ - Eigen 常数 TensorMap

c++ - 在子 QWidget 中修改父 QWidget

c++ - 枚举被定义为结构中的 uint8_t 变量

javascript - 如何访问数组对象?

java - 设计网络应用程序 : where should business logic reside?