
On Sat, Apr 5, 2008 at 8:53 PM, Peter Dimov <pdimov@pdimov.com> wrote:
A compiler that is good at removing the iterator abstraction penalty will show a bigger difference between _SECURE_SCL=0 and =1, so your results aren't surprising. I wasn't disputing that. My point was that if one habitually uses pointers to traverse performance-sensitive vectors, then _SECURE_SCL only affects the non-performance-sensitive vector accesses, where one presumably doesn't mind the extra safety.
(One reason for avoiding vector::iterator is fear of abstraction penalty that may now be obsolete and unfounded; another legitimate one, however, is that pointers imply contiguous storage, and algorithms can take advantage of that.)
I really dislike this. It's been hard enough to convince people that yes, templates are just as fast as doing it manually, so anything that prevents that from being true is, in my opinion, a misfeature --- and contrary to the "spirit" of C++, according to my reading of D&E and the HOPL paper. And vector iterators also imply contiguous storage. Any good implementation ought to specialize for that if they use sequential-memory optimizations. As far as I'm concerned, the implementation shouldn't be doing anything to hurt my performance by default if I have NDEBUG defined. If I want my vectors and such checked, I'll ask for a debug STL. The OS will already prevent me from screwing up some other program. YMMV, ~ Scott