Category ArchiveC++
C++ 31 Aug 2011 10:27 pm
C++ Include Speed
A performance benchmark of which include guard method is faster. Test times the compilation of a main.cpp that includes 10000 files 3 times each.
The tested methods are:
#pragma oncefollowed by#ifndef#ifndeffollowed by#pragma once- Only
#pragma once - Only
#ifndef - External
#ifndef
Sources for the test is at inc.tar.gz, but it’s just 5×10000 files.
The compilers are Microsoft Visual C++ 2010, GNU g++ 4.6.1, and LLVM clang++ 2.9.
C++ 28 May 2011 07:04 pm
C++ Convert String to Double Speed
(There is also a string-to-int performance test.)
A performance benchmark of which method is faster of converting an std::string to a double. The goal is ending up with a double of the value represented in an std::string.
The tested methods are:
- a hand-written naive loop
- atof()
- strtod()
- sscanf()
- boost::lexical_cast<double>()
- boost::spirit::qi::parse()
- std::stringstream
- std::stringstream, reusing the object
Source for the test is at speed-string-to-double.cpp with cycle.h.
The compilers are Microsoft Visual C++ 2010 with _SECURE_SCL disabled, GNU g++ 4.6.0, and LLVM clang++ from Arch.
C++ 10 Feb 2011 06:24 pm
C++ String Compare Performance
A performance comparison of the speed of various ways to compare strings in C++. In this test, all comparisons are of not-equal strings.
Idea from #C++ on QuakeNet, where we always advocate using std::string over various char* functions. I wondered what, if any, the penalty for doing so was.
Sources
- Ticks counted via cycle.h (local mirror)
- Source: speed-string-compare.cpp
Things Tested
- a hand-written naive comparator loop; used as baseline
- string == string
- string == const char*
- strcmp(const char*, const char*) == 0
- strcmp(const char*, string.c_str()) == 0
- strcmp(string.c_str(), string.c_str()) == 0
- string.compare(string)
- string.compare(const char*)
- …and then the whole thing with different offsets.
C++ 28 Jan 2011 04:21 pm
C++ Read Whole File Performance
A performance comparison of the speed of various ways to read an entire file into an std::string in C++.
Idea from BD-Calvin in #C++ on QuakeNet.
Sources
- Ticks counted via cycle.h (local mirror)
- Source: speed-read-whole-file.cpp
- File used was generated with dd if=/dev/urandom of=random100 bs=1M count=100
Things Tested
- writing to a stringstream, then pulling data out as string
- constructing a string via streambuf_iterator
- getting file size via seeking, then preallocating a string to read into
- getting file size via stat(), then ditto…
C++ 14 Apr 2010 08:41 pm
C++ dynamic_cast Performance
(Updated 2010-10-27: Re-run the test with latest clang++ from subversion)
A performance comparison of the speed of dynamic_cast operations in C++.
Idea from http://www.nerdblog.com/2006/12/how-slow-is-dynamiccast.html, who did not provide any source so I wrote my own more extensive tests.
Sources
- Ticks counted via cycle.h (local mirror)
- Source: speed-dynamic-cast.cpp
Things Tested
- reinterpret_cast on a known type
- virtual function call + reinterpret_cast
- member variable access + reinterpret_cast
- successful dynamic_cast to its own type
- successful dynamic_cast from the derived levels to lower levels
- failed dynamic_cast from the derived levels to an unrelated type
