Имя локальных переменных требуется только для компилятора, чтобы найти переменные, на которые вы хотите сослаться. После компиляции эти имена обычно стираются и полностью заменяются числовыми символами или эквивалентами. Это происходит для всех имен, которые практически не связаны (конечно, если вы делаете отладочную сборку, все может быть по-другому). То же самое относится и к параметрам функции.
Например, имя глобальных переменных не может быть удалено, потому что вы можете использовать его из другого модуля в вашей программе, и компоновщик должен иметь возможность его искать. Но после того, как ваша программа была связана, можно удалить даже их названия.
И, в конце концов, они не занимают оперативную память. Эти имена хранятся в таблице перераспределения с целью связывания (см. Программу strip
, как удалить эти имена).
Но в любом случае, мы говорим о нескольких байтах, которые уже потрачены на выравнивание и так далее. Сравните это с адскими именами шаблонов. Попробуйте это:
readelf -sW /usr/lib/libboost_*-mt.so | awk '{ print length($0), $0 }' | sort -n