Нагрузка погрузчика ELF сегменты, а не разделы; отображение из секций в сегменты определяется скриптом компоновщика, используемым для создания исполняемого файла.
Сценарий компоновщика по умолчанию не отображает разделы отладки для любого сегмента, поэтому это опускается.
Информация о символах представлена в двух вариантах: статические символы обрабатываются вне полосы и никогда не хранятся в виде данных раздела; таблицы динамических символов генерируются компоновщиком и добавляются в специальный сегмент, который загружается вместе с исполняемым файлом, так как он должен быть доступен динамическому компоновщику. Команда strip
удаляет только статические символы, которые никогда не упоминаются в сегменте.
Таким образом, вы можете использовать полную отладочную информацию в течение всего процесса, и это не повлияет на размер исполняемого изображения в ОЗУ, так как оно не загружено. Это также означает, что информация не включена в основные дампы, поэтому это также не дает вам никакой пользы.
Утилита objcopy
имеет специальную возможность копировать только отладочную информацию, поэтому вы можете сгенерировать второй файл ELF, содержащий эту информацию, и использовать разделенные двоичные файлы; при анализе дампа ядра вы можете загрузить оба файла в отладчик:
objcopy --only-keep-debug myprogram myprogram.debug
strip myprogram
Я думаю, что вопрос сводится к тому, загружены ли символы в память по умолчанию или нет. Если это так, это будет способствовать увеличению времени загрузки и потребления памяти. Интересный вопрос, с нетерпением жду ответа. +1 – 0xC0000022L
Почему бы не попробовать сделать то и другое? –
@unapersson: Трудно сделать такие тесты в нашей среде, так как производительность сильно зависит от внешних факторов, которые быстро меняются. – Johan