Ali*_*Ali 3 c++ embedded performance
我读取/写入的大多数for循环从0开始,并且公平地说,我读过的大部分代码都用于嵌入式系统,而且它们都是用C/C++编写的.在嵌入式系统中,可读性在某些情况下不如代码效率那么重要.因此,我不确定以下哪种情况会是更好的选择:
版本1
for(i = 0; i < allowedNumberOfIteration; i++)
{
//something that may take from 1 iteration to allowedNumberOfIteration before it happens
if(somethingHappened)
{
if(i + 1 > maxIteration)
{
maxIteration = i + 1;
}
}
}
Run Code Online (Sandbox Code Playgroud)
版本2
for(i = 1; i <= allowedNumberOfIteration; i++)
{
//something that may take from 1 iteration to allowedNumberOfIteration before it happens
if(somethingHappened)
{
if(i > maxIteration)
{
maxIteration = i;
}
}
}
Run Code Online (Sandbox Code Playgroud)
为什么第一版在我看来更好:
1.大多数循环从0开始.因此,也许有经验的程序员发现它从0开始会更好.
为什么第二版在我看来更好:
公平地说,如果从0开始的函数中有一个数组会很好,因为数组的索引从零开始.但是在这部分代码中没有使用数组.
除了第二个版本看起来更简单,因为你不必考虑'+1'.
我不知道的事情
1)有任何性能差异吗?
2)哪个版本更好?
3)在决定起点时是否还应考虑其他方面?
4)我担心太多了吗?
C++ 中所有形式的数组都是从零开始的。即它们的索引从零开始并上升到数组的大小减去一。例如五行的阵列将具有索引0到4(含)。
这就是为什么 C++ 中的大多数循环都是从零开始的。
至于问题的具体名单,对于1有可能是一个性能上的差异。如果在 at 开始循环,1则1如果将该值用作数组索引,则可能需要在每个迭代器中减去。或者,如果增加数组的大小,则会使用更多内存。
对于2,它实际上取决于您要迭代的内容。是否超过数组索引,那么从零开始的循环显然更好。但是您可能需要以任何值开始循环,这实际上取决于您在做什么以及您要解决的问题。
对于3,您需要考虑的是您使用循环的目的。
和4,也许有点。;)