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