首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >C++执行时间测试

C++执行时间测试
EN

Stack Overflow用户
提问于 2018-08-02 01:09:24
回答 2查看 68关注 0票数 0

我正在测试这段代码:

代码语言:javascript
代码运行次数:0
运行
复制
string teststring = "";
int i = 0;

while ( i < 100000000 ) {

i++;

}

执行时间为: 0.359秒。

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

代码语言:javascript
代码运行次数:0
运行
复制
string teststring = "";
int i = 0;

while ( i < 100000000 ) {

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


}

执行时间为4s。

这是一个额外的行,它真的需要更长的时间吗?我可以做一些不同的事情来改善这一点吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2018-08-02 02:00:42

teststring += "something random";将如何实现?类似于:

代码语言:javascript
代码运行次数:0
运行
复制
str = "something random";
for( int i = 0; i < sizeof(str); i++ )
    teststring[teststring.length+i] = str[i];

更不用说如果teststring不够大,它必须使一个新的内存区域增加两倍,然后复制每个字节,然后继续(测试字符串在代码中会变得非常大,使得复制操作非常昂贵)。与i++相比,这非常复杂,因此后者的速度更快是有道理的。

票数 4
EN

Stack Overflow用户

发布于 2018-08-02 04:45:32

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

int i=100000001;

优化编译器也可以对字符串连接执行同样的操作,但它可能没有捕捉到这种情况(可能是因为字符串连接函数可能表明它可以抛出异常,而编译器可能不知道如何处理)。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51638811

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档