std :: vector查找比执行简单操作更快吗?

Kes*_*ria 2 c++

我正在尝试优化一些C++代码以提高速度,而不关心内存使用情况.如果我有一些功能,例如,告诉我一个字符是否是一个字母:

bool letterQ ( char letter ) {
    return (lchar>=65 && lchar<=90) ||
       (lchar>=97 && lchar<=122);
}
Run Code Online (Sandbox Code Playgroud)

是否可以更快地创建查找表,即

int lookupTable[128];
for (i = 0 ; i < 128 ; i++) {
    lookupTable[i] = // some int value that tells what it is
}
Run Code Online (Sandbox Code Playgroud)

然后修改上面的letterQ函数

bool letterQ ( char letter ) {
    return lookupTable[letter]==LETTER_VALUE;
}
Run Code Online (Sandbox Code Playgroud)

我正在尝试在这个简单的区域中优化速度,因为这些函数被大量调用,因此即使速度的小幅增加也会累积到长期增益中.

编辑:

我做了一些测试,如果查找数组被缓存,它似乎比查找函数表现得更好.我通过尝试测试了这个

for (int i = 0 ; i < size ; i++) {
      if ( lookupfunction( text[i] ) )
      // do something
}
Run Code Online (Sandbox Code Playgroud)

反对

bool lookuptable[128];
for (int i = 0 ; i < 128 ; i++) {
    lookuptable[i] = lookupfunction( (char)i );
}

for (int i = 0 ; i < size ; i++) {
    if (lookuptable[(int)text[i]])
        // do something
}
Run Code Online (Sandbox Code Playgroud)

事实证明,第二个速度要快得多 - 大约是3:1的加速.

Jer*_*fin 7

关于唯一可能的答案是"可能" - 您可以通过运行分析器或其他东西来查找代码的时间.有一段时间,如果答案很少或没有资格,那么很容易给出"是".现在,由于速度更快的CPU是如何比内存得到,这是一个很多不太确定的-你可以做很多计算的需要,填补从主内存中的一个缓存行的时间.

编辑:我应该在C或C++中添加它,最好至少从标准库中内置的函数(或宏)开始.这些通常针对目标进行相当精心优化的(对于大多数人来说更为重要)支持切换区域设置等事项,因此您不会试图向您的德国用户解释'ß'不是真正的字母(而且我怀疑很多人会觉得很有趣"但那真的是两个字母,而不是一个!)