Usually, compilers will do loop unrolling. And depending on how "clever" the compiler is, it might (at least theoretically) translate these kernels to something like
c[ i ]=(a[ i ]*b[ i ])*n+(n*(n-1)/2);
where 'n' may be 10 or 10000000.
I assume that the results will be significantly different when you pass the upper value of the loop as an additional parameter....
Another question is whether measing such short time intervals can be precise enough at all - when the time measured varies by ~50%, there may be something odd...