是否有任何特殊方法使用C++标准同时为两个变量分配两个值?

Leo*_*rdo 1 c++ performance

对不起,如果这是一个愚蠢的问题,我还不熟悉计算机科学.这是算法速度的问题.

我遇到了这样一个问题,我决定解决这个问题.我的计划是根据需要增加Fibonacci序列以获得准确的结果.

这是我如何增加;

unsigned int last(1), current(1) ;
unsigned int sum = 0 ;

looping
{
   ...
   current += last ;
   last = current - last ;
}
Run Code Online (Sandbox Code Playgroud)

我觉得这肯定和增量需要一样好,而且考虑到我有限的知识,可能和我想象的一样好.但有没有一种特殊的方法只使用这两个变量来做同样的增量?也许我的想法是错的,但这样做会更快:

temp = current ;
current += last ;
last = temp ;
Run Code Online (Sandbox Code Playgroud)

在视觉上有一个比以前更多的陈述,还有一个额外的变量.他们都做同样的事情,但我觉得一个更快,使用更少的内存.我是否正确,哪一个被认为是最有效的?

另外,我对使用指针的经验不是很熟悉,但我是否正确地假设指针不会发生很大的变化,因为对于int类型的标准,每个数据通常是4个字节?我可以理解为什么使用50字节的自定义类型可能更好地使用指针,但它会帮助我的第二个算法吗?

Dav*_*rtz 7

不不不.保持代码简单明了.这些明显的优化,当它们实际上是改进时,将由编译器完成.

顺便说一句,使用GCC这两个函数产生完全相同的5个汇编指令:

    void sum1(int * __restrict last, int * __restrict current)
    {
            int temp = *current;
            *current += *last;
            *last = temp;
    }

    void sum2(int * __restrict last, int * __restrict current)
    {
            *current += *last;
            *last = *current - *last;
    }
Run Code Online (Sandbox Code Playgroud)

因此,GCC理解他们将始终产生相同的结果,并且可能在其他情况下将它们视为等效的.因此,使用哪一个更清楚地表达您的意图,更容易理解和维护,等等.