Other hints

In general, irrespective of compiler options, it is useful to

  • avoid if tests or call to functions inside loops, if possible.
  • avoid multiplication with constants inside loops if possible
Here is an example of a part of a program where specific operations lead to a slower code

k = n-1;
for (i = 0; i < n; i++){
    a[i] = b[i] +c*d;
    e = g[k];
}

A better code is

temp = c*d;
for (i = 0; i < n; i++){
    a[i] = b[i] + temp;
}
e = g[n-1];

Here we avoid a repeated multiplication inside a loop. Most compilers, depending on compiler flags, identify and optimize such bottlenecks on their own, without requiring any particular action by the programmer. However, it is always useful to single out and avoid code examples like the first one discussed here.