【发布时间】:2016-08-12 09:06:46
【问题描述】:
我举以下例子来说明我的问题:
bool bSign;
// bSign will be set depending on some criteria, which is omitted here.
// b[][][] is a float array, which is initialized in the program
for(int i=0; i<1000; i++)
for(int j=0; j<10000; j++)
for(int k=0; k<10000; k++)
if(bSign)
a[i][j][k] = (b[i][j][k]>500);
else
a[i][j][k] = (b[i][j][k]<500);
在上面的代码中,我必须依靠bSign 来设计我应该使用的那种运算符(> 或<)来设置输出变量a。但是,我发现它的成本很高,因为它是在很长的 for 循环中完成的。关于如何摆脱这种情况的任何想法?
【问题讨论】:
-
我不明白运算符重载应该如何摆脱分支。
-
1) 您不能更改语言。为 int 重载运算符是不可能的。 2) bSign 的值仅在运行时已知。运算符重载应该如何工作,因为这是在编译期间发生的。
-
@CinCout:
a大概是bool[1000][10000][10000]。 -
一个体面的优化编译器会注意到 bSign 是一个循环不变量,并将其从最内层循环中删除。
-
我想要一台实际运行这段代码的机器,至少有 500 GB 的内存。在我的家用电脑上,如果我添加一个更大的硬盘驱动器,这将需要永远运行,因为从/向磁盘加载/写入虚拟内存。
标签: c++