2012-05-20 3 views
3

GCC disables lots of builtins при работе в строгом режиме -std=c....Почему GCC не использует встроенные функции в строгом режиме?

Вне строгий режим ISO C (-ansi, -std = C90, C99 = -std или -std = с11), то функции _exit, ALLOCA, bcmp, bzero ... stpcpy, ... может обрабатываются как встроенных функций. Все эти функции имеют соответствующие версии с префиксом _ builtin, которые могут использоваться даже в строгом режиме C90.

Есть ли причина для этого? Являются ли построины несоответствующими? Или это потому, что в стандарте говорится, что когда вы вызываете memcpy, он действительно должен его называть и что я не могу оптимизироваться?

Я чувствую, что мой код мог бы определенно работать быстрее, если я перекомпилировать его с помощью -std=gnu*, поскольку это позволило бы еще немного optimizations

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

ответ

4

Ни один из _exit, alloca, bcmp, bzero, stpcpy или любых из других функций в этом списке определены в стандарте C, поэтому они не должны определяться соответствующим C-компилятором; эти имена должны быть доступны пользователю для их собственных идентификаторов.

Обратите внимание, что многие другие встроенные модули по-прежнему включены в строгом режиме ISO. Например, memcpy «признан [a] встроенным [функцией], если не указано значение -fno-builtin«

+0

ouch, вы правы. Я думаю, что я быстро прочитал документ и перепутал списки функций. но ваше объяснение стоит в любом случае. Благодарю. –

Смежные вопросы