问题描述
有没有办法提高将 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 (将#修改为@)