c - Strange compiler speed optimization results - IAR compiler -
i'm experiencing strange issue when try compile 2 source files contain important computing algorithms need highly optimized speed.
initially, have 2 source files, let's call them a.c
, b.c
, each containing multiple functions call each other (functions file may call functions other file). compile both files full speed optimizations , when run main algorithm in application, takes 900 ms run.
then notice functions 2 files mixed logical point of view, move functions a.c
b.c
; let's call new files a2.c
, b2.c
. update 2 headers a.h
, b.h
moving corresponding declarations.
moving function definitions 1 file other modification make!
the strange result after compile 2 files again same optimizations, algorithm takes 1000 ms run.
what going on here?
what suspect happens: when functions f
calls function g
, being in same file allows compiler replace actual function calls inline code optimization. no longer possible when definitions not compiled @ same time.
- am correct in assumption?
- aside regrouping function definitions before, there can obtain same optimization before? researched , seems it's not possible compile 2 source files simultaneously single object file. order of compilation matter?
as whether assumption correct, best way tell examine assembler output, such using gcc -s
or gcc -save-temps
. that definitive way see compiler has done.
as compiling 2 c source files single object file, that's certainly doable. create ab.c
follows:
#include "a.c" #include "b.c"
and compile that.
barring things should kept separate (such static items may exist in both c files), should work (or @ least work little modification).
however, remember optimisation mantra: measure, don't guess! you're giving fair bit of encapsulation combining them make sure benefits outweigh costs.