3 回答
TA贡献1825条经验 获得超4个赞
它有一个和两个循环版本之间最大的差异(几乎是三倍)。 这是唯一的一点,其中单循环(即连续分配)超过了两个循环版本。(这使得神秘的答案成为可能。)
提案
TA贡献1858条经验 获得超8个赞
n
for(int j=0;j<n;j++){
a[j] += b[j];}for(int j=0;j<n;j++){
c[j] += d[j];}abcd
for(int j=0;j<n;j++){
a[j] += b[j];
c[j] += d[j];}n = 2
带着 for(int j=0;j<n;j++){ a[j] += b[j];}for(int j=0;j<n;j++){ c[j] += d[j];}高速缓存 a[0]和 a[1]然后 b[0]和 b[1]并设定 a[0] = a[0] + b[0]在缓存中-缓存中现在有四个字节, a[0], a[1]和 b[0], b[1]..费用=100+100。 集 a[1] = a[1] + b[1]在缓存中。费用=1+1。 重复 c和 d.总费用= (100 + 100 + 1 + 1) * 2 = 404带着 for(int j=0;j<n;j++){ a[j] += b[j]; c[j] += d[j];}高速缓存 a[0]和 a[1]然后 b[0]和 b[1]并设定 a[0] = a[0] + b[0]在缓存中-缓存中现在有四个字节, a[0], a[1]和 b[0], b[1]..费用=100+100。 弹出 a[0], a[1], b[0], b[1]从缓存和缓存 c[0]和 c[1]然后 d[0]和 d[1]并设定 c[0] = c[0] + d[0]在缓存中。费用=100+100。 我怀疑你开始看到我要去哪里了。 总费用= (100 + 100 + 100 + 100) * 2 = 800
- 3 回答
- 0 关注
- 624 浏览
添加回答
举报
