title: clang vs gcc - optimization including operator new
body: <p>I have this simple example I was testing against and I noticed that gcc optimizations (-O3) seems not be as good as clang ones when <strong>operator new</strong> is involved. I was wondering what might be the issue and if it possible to force gcc to produce more optimized code somehow?</p>
  
  <pre><code>template&lt;typename T&gt;
  T* create() { return new T(); }
  
  int main() {
      auto result = 0;
      for (auto i = 0; i &lt; 1000000; ++i) {
          result += (create&lt;int&gt;() != nullptr);
      }
  
      return result;
  }
  
  
  #clang3.6++ -O3 -s --std=c++11 test.cpp
  #size a.out
     text    data     bss     dec     hex filename
     1324     616       8    1948     79c a.out
  #time ./a.out 
  real 0m0.002s
  user 0m0.001s
  sys  0m0.000s
  
  #gcc4.9 -O3 -s --std=c++11 test.cpp
  #size a.out
     text    data     bss     dec     hex filename
     1484     624       8    2116     844 a.out
  #time ./a.out
  real 0m0.045s
  user 0m0.035s
  sys  0m0.009s
  </code></pre>
  
  <p>Example above is just a simple version of the code I have been testing in the beginning,
  but it still illustrates the difference between gcc/clang.
  I checked the assembly code as well and there is not a huge difference in size, but definitely in performance. On the other hand maybe clang is doing something which is not allowed?</p>