Что .text.unlikely означает в объектных файлах ELF? - PullRequest
1 голос
/ 03 февраля 2020

В моем выводе objdump -t я вижу следующие две строки:

00000000000004d2 l     F .text.unlikely 00000000000000ec function-signature-goes-here [clone .cold.427]

и

00000000000018e0 g     F .text  0000000000000690 function-signature-goes-here

Я знаю l означает локальный, а g означает глобальный. Я также знаю, что .text является разделом или типом раздела в объектном файле, содержащем инструкции скомпилированной программы. Но что такое .text.unlikely? Предполагая, что это другой раздел (или тип раздела) из .text - в чем разница?

1 Ответ

4 голосов
/ 04 февраля 2020

На моей man-странице G CC v5.4.0 я нашел следующий переключатель:

-freorder-functions, который говорит:

Переупорядочить функции в объектном файле, чтобы улучшить местность кода. Это реализуется с помощью специальных подразделов ".text.hot" для наиболее часто выполняемых функций и ".text.unlikely" для маловероятно выполняемых функций. Переупорядочение выполняется компоновщиком, поэтому формат объектного файла должен поддерживать именованные разделы, а компоновщик должен размещать их разумным образом.

Также должна быть доступна обратная связь профиля, чтобы сделать эту опцию эффективной. Подробности смотрите в -fprofile-arcs.

Включено на уровнях -O2, -O3, -Os.

Похоже, что компилятор был запущен с флагами оптимизации или этот переключатель для этого двоичного файла и функции организованы в подразделы для оптимизации пространственной локализации.

...