title: Does omitting the frame pointers really have a positive effect on performance and a negative effect on debug-ability?
body: <p>As was advised long time ago, I always build my release executables without frame pointers (which is the default if you compile with /Ox).</p>
  <p>However, now I read in the paper <a href="http://research.microsoft.com/apps/pubs/default.aspx?id=81176" rel="noreferrer">http://research.microsoft.com/apps/pubs/default.aspx?id=81176</a>, that frame pointers don't have much of an effect on performance.  So optimizing it fully (using /Ox) or optimizing it fully with frame pointers (using /Ox /Oy-) doesn't really make a difference on peformance.</p>
  <p>Microsoft seems to indicate that adding frame pointers (/Oy-) makes debugging easier, but is this really the case?</p>
  <p>I did some experiments and noticed that:</p>
  <ul>
  <li>in a simple 32-bit test executable (compiled using /Ox /Ob0) the omission of frame pointers does increase performance (with about 10%).  But this test executable only performs some function calls, nothing else.</li>
  <li>in my own application the adding/removing of frame pointers don't seem to have a big effect.  Adding frame pointers seems to make the application about 5% faster, but that could be within the error margin.</li>
  </ul>
  <p>What is the general advice regarding frame pointers?</p>
  <ul>
  <li>should they be omitted (/Ox) in a release executable because they really have a positive effect on performance?</li>
  <li>should they be added (/Ox /Oy-) in a release executable because they improve debug-ablity (when debugging with a crash-dump file)?</li>
  </ul>
  <p>Using Visual Studio 2010.</p>