Как GCC решает, в каком порядке выводить функции сборки? - PullRequest
13 голосов
/ 31 июля 2011

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

1 Ответ

9 голосов
/ 31 июля 2011

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...