Computers and heat density

Chuck Guzis cclist at sydex.com
Sun Aug 13 23:29:37 CDT 2006


On 8/13/2006 at 11:53 PM Sean Conner wrote:

>	for (i = 0 ; i < MAX ; i++)
>		foo[i] = 0;
>
>  when it could easily be replaced with:
>
>	memset(foo,0,sizeof(foo));

The argument some would give you is that if you had a compiler worth spit,
it would optimize away the index and reduce the above to:

	memset(foo,0,sizeof foo);
	i = MAX;

Then if the compiler saw that the value of i was re-initialized without
being read, it would get rid of the last statement.    The explicit loop
statement is a easy way to explicitly state what's meant and does not rely
on the implementation of a library function.

One thing I've learned is "never underestimate the cleverness of a good
optimizer".  If a loop is particularly complicated, you can occasionally
find an automatic optimization that's nothing short of pure genius.

We need to ask more of our compiler writers; we really do. 

>  That's just the programmer not knowing the available functions, or
>perhaps, coming from a system that doesn't have stat() available (it's not
>part of the ANSI-C standard library, limiting the ways one can get the
size
>of a file portably, and each of them having problems).  For more horror
>stories, you can always check out http://thedailywtf.com/ .

Why not fseek( file, 0, SEEK_END);  length = ftell( file); ?
ANSI-compatible and shouldn't involve any I/O.

Cheers,
Chuck





More information about the cctalk mailing list