3 ms·
C++ can suffer from negative performance from template bloat in two ways: Templated symbol names are gigantic. This can impact program link and load times sign
by josefx 5y ago
C++ can suffer from negative performance from template bloat in two ways:
Templated symbol names are gigantic. This can impact program link and load times significantly in addition to the inflated binary size.
Duplication of identical code for every type, for example the methods of std::vector<int> and std::vector<unsigned int> should compile to the same instructions. There are linker flags that allow some deduplication but those have their own drawbacks, another trick is to actively use void pointers for code parts that do not need to know the type, allowing them to be reused behind a type safe template based API.
- fbkr 5y ago> There are linker flags that allow some deduplication but those have their own drawbacks As long as you use --icf=safe I don't see any drawback, and most of the time it results in almost identical reductions to --icf=all since not many real programs compare addresses of functions.
- josefx 5y agoI think that requires separate function sections, which themselves may cause bloat and data duplication.
- fbkr 5y agoI, along with everyone in the embedded space, have been using separate function sections forever for --gc-sections and I would be very surprised if they really cause any bloat and duplication at runtime. Do you mean bloat for intermediate files?
- josefx 5y agoIt may be limited to intermediate files, I assumed that the downside would be bigger since it is not a default and the description mentioned that some things may not be merged as well.