Why is not more FreeBSD software written in C++?

Don Dugger dugger at hotlz.com
Sat Apr 22 15:33:18 UTC 2006


Not that it matters a great deal but I didn't write that.

Don ;^)

Dan Strick wrote:

>On Friday 21 Apr 2006 09:20, Don Dugger wrote:
>  
>
>>The example above is not exactly a realworld example. Even if you stick
>>to  plain C, a repeated putchar(' ') is 1-2 orders of magnitude slower
>>than aggregating those characters and write()'ing them every few dozen
>>chars.
>>
>>    
>>
>
>This might seem obvious, but is it really true?  I wrote a program that
>tries it both ways with the output redirected to /dev/null and discovered
>that filling a 24 character buffer and doing a write() takes about 11 times
>as much cpu time as 24 putchar()s.  Perhaps a buffer larger than a "few
>dozen chars" would be useful.  There must be a moral here somewhere.  :-)
>
>Don continued:
>  
>
>>I'm not sure that I/O routine efficiency is really that relevant. I can't
>>think of any program I use whose I/O routines are CPU bound. Ok, I guess
>>if  we look at really weak or embedded devices, say, those Soekris
>>net4501  boards, I/O CPU efficiency will make a difference.
>>
>>    
>>
>
>I wrote in my original message that I first noticed the iostream performance
>problem when I compared the run time of a C program rewritten in C++ to the
>run time of the original C program.  The C++ version ran about 5.5 times
>slower.  It was a very "real world" program that performed some simple matrix
>computations and pretty-printed the results.  Most of the effort apparently
>went into the pretty-printing.  This must have exaggerated the performance
>problem.
>
>The C program did a lot of stuff like:
>
>	char buf[...];
>	sprintf (buf, "...", ...);	/* format output */
>	do_something_with (buf);
>
>The equivalent iostream idiom is:
>
>	ostringstream bos;
>	bos.str ("");
>	bos << ... ;			// format output
>	string s = bos.str();		// extract string from ostringstream
>	do_something_with (s.c_str());	// extract characters from string
>
>This turns out to be a performance nightmare for various reasons
>apparently involving the implementation of strings and iostreams.
>The problem is not just with ostringstreams.
>
>	printf ("...", ...);
>
>generally runs many times faster than
>
>	cout << ... << ...;
>
>The problem is not just with formatted output.  
>
>	putchar (c);
>
>also runs many times faster than
>
>	cout.put (c);
>
>I don't know why.  It just does.  Perhaps in-line functions are not
>always an efficient alternative to preprocessor macros.
>
>I am not claiming that strings and iostreams are bad.  I am observing
>that some reasonable programs that use these facilities will run very
>slowly and I am suggesting that it is not always obvious which programs
>these are.  I am also expressing disappointment because I want the
>decision to use any feature of C++ or its standard library to be a
>no-brainer.
>
>Dan Strick
>_______________________________________________
>freebsd-chat at freebsd.org mailing list
>http://lists.freebsd.org/mailman/listinfo/freebsd-chat
>To unsubscribe, send any mail to "freebsd-chat-unsubscribe at freebsd.org"
>  
>



More information about the freebsd-chat mailing list