on clang version 5.0.1以下代码
#include <iostream>
#include <string>
using namespace std;
int main(int argc, char *argv[]) {
string str = "abcdefghijklmnopqrstuvwxyz";
for (int i = 0; i < 5000000; i++) {
str.substr(4);
}
return 0;
}
给我以下时间
real 0m0.104s
user 0m0.096s
sys 0m0.002s
现在,如果我更改了str.substr(3)
,我最终会得到以下时间
real 0m0.478s
user 0m0.468s
sys 0m0.003s
据我所知,gcc不会受此影响。任何人都可以解释这里可能存在的问题吗?
编辑:
更重要的是,是否有人可能会建议如何避免这种巨大的性能损失?
EDIT2:
这似乎是某种短字符串优化技巧,特别是自22 is magic number in that context以后。