雷达 发表于 2022-9-26 01:302 [8 |# x+ i4 j* T- X
理了理思路,重新做了一个测试。) n; e$ q4 t3 g' w
做了两个 vector 和 两个 float *, 都长 1000002 ~7 s* k5 l( y) U/ N5 U) Z
外循环 6000,里面先做随 ...
3 v# ` E y0 f6 }( Q7 r
这个时间是从哪里开始算的?7 X3 D$ j$ @; V6 \" y
我怀疑这个200多秒里面有200秒花在产生随机数上了,真正计算大概只用了2秒, 用了vector那个因为有vector的额外开销,多了几十秒。* u2 z \- b M$ y: @- U
按照两个10万个数字的相关计算的规模来估计的话,两秒都算很长很长了。这个结果真的很奇怪。
你这个循环主要的计算时间是那个rand,这个循环本身占用时间微乎其微。 # F& S. W+ z4 ~1 I- o你的空循环,如果是现在的代码,编译器很可能完全不生成对应代码,因为没有任何输出或者修改变量,所以可以看到时间都是202S。你可以认为啥都不干的时间就是那么多。5 T6 y, C6 E( T% e- i9 S, D
与此对应用数组(指针)花了2S8 f% b. W# b. O! Z) K
你用vec1[jj]*vec2[jj]理论上不应该差30多秒,这里很可能是你对vector的操作带来了内存操作,你可以试试把初始化挪出循环然后再比较,理论上vector的随机访问和数组应该几乎没什么区别。