Diffs are represented by a DeltaSizeInfo, where each DeltaSymbol contains a reference to a before and after symbol.
For new symbols, before is None, and for removed symbols, after is None.
The diffing algorithm is optimized for the common case of many unchanged symbols.
$DIFF_KEY -> symbol for all “before” symbols.$DIFF_KEYsDeltaSymbols for symbols that have not changed are created when diffing, but discarded when writing .sizediff files (see file_format.md).
The $DIFF_KEYs are:
DIFF_KEY=(container, section, full_name, path, s.size_without_padding)DIFF_KEY=(container, section, full_name, path)DIFF_KEY=(container, section, name, path)DIFF_KEY=(container, section, full_name)Since symbol padding tends to fluctuate from build to build, changes to padding is not considered. Padding is removed from all symbols when diffing and per-section cumulative change in padding is shown by a symbol called Overhead: aggregate padding of diff'ed symbol.
No special treatment is made for symbols aliases. If the number of symbols in an alias group changes, a diff will show a size change for all symbols in the group. In the past there was an attempt to have diffs exclude showing changes to the number of aliases in a group, but it never worked reliably and added a lot of complexity. E.g., A symbol from one alias group changes to belong to a different alias group.