我的代码存在一些问题
遵循以下代码:
GainDetailMatI
是Mat
类型,带有9792 * 2448矩阵
ContrastGainBound4096x
,ContrastGainLayerI
为int
平台:Android 4.4,NDK gcc 4.9
A:
Mat plus = ContrastGainLayerI * min(ContrastGainBound4096x, max(0, GainDetailMatI - 4096.0));
B:
Mat t=max(0, GainDetailMatI - 4096.0);
Mat plus = ContrastGainLayerI * min(ContrastGainBound4096x, t);
使用比B多13毫克 我在Application.mk
处设置了APP_OPTIM := debug
来关闭gcc优化
有没有人知道原因?
我想也许max(0, GainDetailMatI - 4096.0)
会以MatExpr
类型返回
并t=max(0, GainDetailMatI - 4096.0);
将MatExpr
转换为Mat
也许这就是原因?
非常感谢!
答案 0 :(得分:1)
在示例B中,首先将对象存储在t中,检索它以在代码的第二部分中使用。在示例A中,您跳过存储和检索,使代码更有效。虽然这表明将所有代码转储到一行通常会使其更有效,但请记住,readablility有很多值。有关Java性能的更多信息可以在wiki上找到。 https://en.wikipedia.org/wiki/Java_performance#Compressed_Oops