LINUX.ORG.RU

Влияние директивы static на генерируемый код ?


0

0

Уважаемые!

Проясните, если не сложно, как использование директивы static влияет на выходной код? Если влияет...

Или она только для ограничения scope функции на этапе компиляции?

Заранее спасибо всем ответившим.

anonymous

Не только на уровне компиляции, но и на уровне сборки. Для не static объектов генерируется директива типа .global с объявлением общей доступности из других файлов по extern. Вместе с другими директивами (inline, const) static вообще может вызывать массовую оптимизацию с исключением (и не только для констант) выделения места под объекты, включением их явно в код и т.п. В некоторых случаях доступна дополнительная регистровая адресная оптимизация.

io ★★
()

Сенькс за ответ, в общем-то так и думал.

То есть, если есть один большой файл, где плохой стиль и навалена куча static процедур - растащив их по разным файлам в соответствии с назначением - получим ухудшение результирующего объектного кода?

Насколько критично это ухудшение?

anonymous
()

тогда уточни про какой static ты говоришь? есть несколько вариантов: 1. static функция --- значит локальная для единицы трансляции.

2. static локальная переменная --- значит лежит не в стэке и инициализируется 1 раз при первом входе.

3. static член в классе --- значит может/должен вызываться для класса, а не объекта и один экземпляр на все объекты (для данных)

anonymous
()

Если static локальные объекты (переменные/процедуры) остануться static, то ситуация только улучшиться, т.к. всякого рода offset-ы уменьшаться. Если навалено слишком много в один файл в надежде на оптимизацию, то, во-первых, не гарантируется, что все оптимизируется, во-вторых,оптимизация может быть с ошибками, в-третьих, этот эффект оптимизации не переносим с платформы на платформу. Наибольший потенциальный эффект оптимизации (и возможные ошибки) дают inline-процедуры, в Linux-е типично расположение static inline процедур в include-файлах, при этом и размер кода не всегда обязан проигрывать. А остальное из данной серии - ну помогает, конечно, но изменения в алгоритме всегда дают больше, доли или отдельные проценты к разам.(static члены в С++ тоже глобальны, т.е. не эквивалентны static в C, хотя и их можно рихтовать).

io ★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.