C ++执行时间测试

时间:2018-08-01 17:09:24

标签: c++ performance loops testing

我正在测试此代码:

string teststring = "";
int i = 0;

while ( i < 100000000 ) {

i++;

}

执行时间为:0.359 s。

然后我尝试再次进行完全相同的测试,但是这次我在循环中添加了额外的一行:

string teststring = "";
int i = 0;

while ( i < 100000000 ) {

i++;
teststring += "something random";


}

执行时间为4 s。

这是另外一行,是否真的需要更长的时间?我可以做些其他事情来改善这一点吗?

2 个答案:

答案 0 :(得分:4)

如何实施teststring += "something random";?像这样:

str = "something random";
for( int i = 0; i < sizeof(str); i++ )
    teststring[teststring.length+i] = str[i];

更不用说teststring是否足够大,它必须创建一个两倍大的新内存区域,并复制每个字节,然后继续(测试字符串在代码中将变得非常大) ,使该复制操作相当昂贵)。与i++相比,这非常复杂,因此可以认为后者要快得多。

答案 1 :(得分:1)

除了Nicholas Pipitone的观点之外,优化的编译器还可以合法地消除原始的for循环并将其替换为:

int i = 100000001;

优化的编译器可以对字符串合并执行相同的操作,但是它可能并没有费心抓住这种情况(可能是因为字符串合并功能可能表明它可以引发异常,编译器可能不知道如何处理)