title: Why does GCC do not use builtins in strict mode?
body: <p>GCC <a href="http://gcc.gnu.org/onlinedocs/gcc/Other-Builtins.html" rel="nofollow">disables lots of builtins</a> when running in strict mode <code>-std=c...</code>.</p>
  
  <blockquote>
    <p>Outside strict ISO C mode (-ansi, -std=c90, -std=c99 or -std=c11), the
    functions _exit, alloca, bcmp, bzero ... stpcpy, ... may be handled as
    built-in functions. All these functions have corresponding versions
    prefixed with _<em>builtin</em>, which may be used even in strict C90 mode.</p>
  </blockquote>
  
  <p>Is there any reason for that ? Are the builtins not conformant ? Or is this because the standard says that when you call <code>memcpy</code> it should actually call it and that i can't be optimized out ?</p>
  
  <p>I feel like my code could then definitely run faster if i recompiled it using <code>-std=gnu*</code> because it would enable some more <a href="http://gcc.gnu.org/onlinedocs/gcc/C-Dialect-Options.html#C-Dialect-Options" rel="nofollow">optimizations</a></p>
  
  <blockquote>
    <p>GCC normally generates special code to handle certain built-in
    functions more efficiently; for instance, calls to alloca may become
    single instructions which adjust the stack directly, and calls to
    memcpy may become inline copy loops</p>
  </blockquote>