有没有办法提高将 unsigned long long 添加到 unsigned int 的性能

问题描述

有没有办法提高将 unsigned long long 添加到 unsigned int 的性能?

我循环多次并且必须做这种类型的总和:

for(unsigned int i = 0; i < 320000000; ++i)
{
unsigned long long myUlonglong = 123456;
unsigned long long ret = i + myUlonglong;
//do some other stuff here with ret
}

如果 myUlonglong 和 ret 是 unsigned long long,则操作比 unsigned int 花费的时间要多得多。有没有办法改善它?为什么它更长?

类型是强制性的,我必须使用 unsigned long long。 我在 x86_64 上,使用 gcc 6.4.1,没有 g++ 的特定选项

编辑

我的代码看起来比第一个例子更像:

typedef struct {
unsigned long long start;
unsigned int duration;
} info;


#define EPSILON 200

std::list<info> listInfoA; // 200 000 elements here
std::list<info> listInfoB; // 200 000 elements here

std::list<info>::iterator indInfoB = infoB.begin();
std::list<info>::iterator endInfoB = infoB.end();

for(auto &infoA:listInfoA)
{
    const unsigned long long endInfoA = infoA.start + infoA.duration;
    
    keepGoing = true;
    while(keepGoing && indInfoB != endInfoB)
    {
        info &refInfoB = *indInfoB;
        
        if(endInfoA < refInfoB.start + refInfoB.duration + EPSILON)
        {
            keepGoing = false;
        }
    }
}   

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)