
Mat Marcus schrieb:
I'm surprised to hear you say this, as my experience is so different. To see whether this might be because things changed with in VC 9, I ran one of our benchmark suites to measure the _SECURE_SCL penalty for release builds. The benchmarks attempt, amongst other things, to measure the abstraction penalty by comparing the performance of different algorithms when using a vendor's vector with associated iterator type vs. an array with pointers.
Weird, tested the following snippet: double* cdata = new double [100000]; for (int i = 0; i < 100000; ++i) cdata [i] = std::rand () / static_cast<float> (RAND_MAX); std::vector<double> data (cdata, cdata + 100000); Timer t; std::sort (cdata, cdata + 100000); std::cout << t.getElapsedTime () << std::endl; t.reset (); std::sort (data.begin (), data.end ()); std::cout << t.getElapsedTime () << std::endl; delete [] cdata; with Timer being a high-resolution timer on Windows. Results: Debug/x64 0.0856235 2.25998 Release/x64 0.0164568 0.0163389 <-- The std::vector version is *faster* For std::accumulate, its Release/x64 0.000354514 0.000479391 in Release (ok, 50% slower but no way an order of magnitude) and Debug/x64 0.000603987 0.0168896 in Debug. Does not sound too bad to me actually? Not sure, maybe the x64 exception handling is just vastly better for non-thrown exceptions. I'm keeping it on, just in case, and I hope Boost won't override the compiler default. Cheers, Anteru