Подтвердить что ты не робот

Как GCC решает, какой порядок вывода функций сборки?

Чтение через сборку GCC генерирует файлы C в моем проекте, я замечаю, что функции не выводятся в сборке в том же порядке, в каком они появляются в исходном файле. Какова цель этого переупорядочения и какие эвристики использует GCC для определения порядка? (Это просто артефакт функций хранения данных?) Это не -freorder-functions, так как я не использую -fprofile-arcs.

4b9b3361

Ответ 1

В более поздних частях этапа оптимизации между процедурами используется обратный снизу график вызова; что порядок, который вы видите. Там есть статья об оригинальном дизайне этой части GCC здесь (с того момента, этот материал впервые появился в GCC 3.4).

Вы можете предотвратить переупорядочение с помощью -fno-toplevel-reorder (или -fno-unit-at-a-time для менее поздних версий GCC), но это отключает некоторые связанные с этим оптимизации.