4 ms·
It seems way more to me, that the linker shouldn't merge different implementations of a function. On the other hand the compiler maybe should rename the functi
by legulere 10y ago
It seems way more to me, that the linker shouldn't merge different implementations of a function.
On the other hand the compiler maybe should rename the function when it does inter-procedural optimization on it.
- cwzwarich 10y agoThe C/C++ standards require that two pointers to the same inline function are equal, even across translation unit boundaries. Therefore, in the worst case you need to pick a single implementation of the function in the linker. Of course, you could use different implementations in translation units where the address of the function is insignificant. A similar issue affects the C++ template compilation model used in most compilers. If template instantiations weren't merged at link time, C++ binaries would be incredibly bloated (and C++ binary size is already a problem).
- DannyBee 10y ago"The C/C++ standards require that two pointers to the same inline function are equal, even across translation unit boundaries." Sigh. I presume this is because you can pass inline functions to callbacks, and the 6 people in the world who do if (a == &f::foo) {do something} want it to work no matter what? One solution, of course, is to privatize the function you call, but still hand any code paths that escape pointers and take the address the "other" version (which is i presume what you meant)