g++ ne fait aucune optimisation algorithmique. Au niveau du code source, tout ce que tu peux faire sans faire d'hypothèse sur ton architecture c'est de pré-calculer ta valeur d'arrêt (end-1) hors de la boucle, pour éviter qu'elle ne soit recalculée à chaque fois.
Ensuite le compilateur peut faire beaucoup de choses sympa à l'optimisation, notamment du loop-unrolling, des indices de branch-prediction, une meilleure utilisation du cache ou encore de l'utilisation d'instructions particulières de ton CPU permettant de traiter plusieurs données d'un coup. Ce sont des choses dont tu ne devrais pas vraiment te soucier au niveau du programme lui-même.
Ton programme est taggé comme C++, mais est presque entièrement codé en pur C. Si par contre tu comptes utiliser des fonctionnalités C++, la meilleure solution est de mettre des données dans un std::valaray et utiliser std::valarray::sum:
http://www.cplusplus.com/reference/valarray/valarray/sum/