ПОС на OSX GCC - PullRequest
       31

ПОС на OSX GCC

2 голосов
/ 16 августа 2011

Почему в GCC в OSX 10.5 опция -fPIC включена по умолчанию? В конце концов, не генерирует ли он больший и медленный код?

1 Ответ

4 голосов
/ 07 сентября 2011

Если ваша программа не имеет много очень маленьких функций, все из которых используют глобальные или статические переменные, или target-c, любое снижение производительности или разницы в размерах будет незаметно. PIC не используется для автоматических локальных переменных, поскольку к ним уже осуществляется доступ через стек. В функциях, которые в этом нуждаются, настройка требует только четырех инструкций, что немного по сравнению с кодом в функции. Каждый доступ с использованием PIC всего на один байт длиннее, чем доступ без него, поэтому, опять же, особой разницы нет.

Если вы собираете 64-битную версию, PIC, вероятно, будет меньше, и, скорее всего, не будет никакой разницы в производительности. В архитектуре x86-64 добавлена ​​новая относительная к инструкциям адресация, что означает, что для PIC не требуется настройка. Этот новый режим адресации фактически на один байт короче кодирования абсолютного адреса в инструкции, поскольку байт SIB не используется.

Наконец, использование PIC делает ваш код более безопасным. Если ваш код должен загружаться в одно и то же место каждый раз, тогда кто-то может найти расположение важных функций и данных и вызвать проблемы во время выполнения. Однако, если ОС может выбрать загрузку вашего кода по другому адресу, любой, кто пытается вызвать проблемы, должен выяснить, где находятся функции и структуры данных при каждом запуске программы.

...