编译器是否优化了语句"for"第二个条件?

Does the compiler optimize the second condition in "for" statement?

本文关键字:for 第二个 条件 语句 是否 优化 编译器      更新时间:2023-10-16

我希望通过索引通过向量进行迭代,然后我有:

for(size_t i=0;i<v.size();++i)
{...}

我知道使用迭代器访问更有效,但是我只想在编译器优化的技术上进行讨论。

我的问题是,这个" v.size()"是否仅执行一次或多次执行?

或,编译器将帮助我确定是否需要足够计算大小,或者需要通过任何优化策略来多次调用尺寸 - 因此我不必:

size_t s=v.size()
for(size_t i=0;i<s;++i)

使代码更有效?

我的问题是,这个" v.size()"仅执行一次或多次执行?

每当循环主体完成执行时,它会多次执行,以检查是否应该再次执行。

编译器可能会或可能不会在不多次调用size()的情况下优化代码,这仅取决于编译器。

如果编译器可以保证您不会在循环中修改v,那么是的,编译器完全有可能优化它。如果不能,那么它可能(如果是这样,那么编译器很差)就不会,并且无法优化它,因为编译器然后会生成对完全不同的代码,然后你写的。

另外,即使编译器没有将其优化,您也可以节省1或2个CPU周期,这实际上没有。size()O(1),称其不应做其他事情,只能从向量返回成员变量。不要过早地优化。

相关文章: