I had a discussion with Johannes Schaub regarding the keyword inline
.
The code there was this:
namespace ... {
static void someFunction() {
MYCLASS::GetInstance()->someFunction();
}
};
He stated that:
Putting this as an inline function may
save code size in the executable
But according to my findings here and here it wouldn't be needed, since:
- [Inline] only occurs if the compiler's cost/benefit analysis show it to be profitable
- Mainstream C++ compilers like Microsoft Visual C++ and GCC support an option that lets the compilers automatically inline any suitable function, even those not marked as inline functions.
Johannes states that there are other benefits of explicitly specifying it, which I do not understand. For instance, he stated that
[..] "inline" allows you to define the function multiple times in the program.
.. which I am having a hard time understanding (and finding references to).
So
- Is
inline
just a recommendation for the compiler? - Should it be explicitly stated when you have a small function (I guess 1-4 instructions?)
- What other effects are there when writing
inline
? - is it needed to state
inline
in order to reduce the executable file size, even though the compiler should find such functions itself?
Is there anything else I am missing?
Best Answer
To restate what I said in those little comment boxes. In particular, I was never talking about inlin-ing:
Now, both TU1 and TU2 have their own copy of
f
- the code off
is in the executable two times.Both TUs will emit specially marked versions of
f
that are effectively merged by the linker by discarding all but one of them. The code off
only exists one time in the executable.Thus we have saved space in the executable.