секция под названием .debug_info
, которая занимает наибольшую память.
Обратите внимание, что в этом разделе нет флага SHF_ALLOC
, и поэтому не не занимает ОЗУ во время выполнения (занимает только место в файловой системе). Конечно, если вы используете ramdisk, то этот раздел все равно будет стоить вам оперативной памяти.
возможно ли удалить это для релизных сборок?
Да: ни один из разделов .debug*
не требуется во время выполнения, и все они могут быть безопасно удалены.
Опция
-g0
и -s
не работает.
Скорее всего, вы получаете .debug_*
разделы из библиотек, в которые вы ссылаетесь, а не из своего собственного кода. -g
присутствовал при компиляции библиотек, поэтому сборка с -g0
не имеет никакого эффекта.
Удивительно, что -s
не сработало, но, возможно, ваш компилятор интерпретирует этот флаг по-другому.
В любом случае вы должны использовать strip --strip-debug
, чтобы избавиться от .debug_*
секций (примечание: не удаляет таблицу символов).
На самом деле лучше всего скомпилировать весь код с полной информацией отладки (-g
), сохранить полный двоичный файл отладки для последующего анализа, использовать strip --strip-debug
, чтобы сделать двоичный файл релиза, и использовать этот двоичный файл для фактического распределение.
Если / когда двоичный файл релиза дает сбой и оставляет дамп ядра, наличие (сохраненного) полностью совпадающего двоичного файла с полной отладкой значительно улучшает анализ после смерти.