On Thursday 14 September 2006 17:41 Andreas Schwab wrote:
> Philipp Marek <[EMAIL PROTECTED]> writes:
> > On Thursday 14 September 2006 15:01 Andreas Schwab wrote:
> >> Note that "L" is not a valid length modifier for integer formats.
> >
> > For gnu libc it is:
> > http://www.gnu.org/software/libc/manual/html_node/Integer-Conversions.htm
> >l#Integer-Conversions
> It's better not to depend on non-standard extensions when it is easy to
> avoid.
There you're right.
> >> Assuming you meant %llu instead of %Lu you can always add a cast to
> >> unsigned long long to match the format.
> >
> > Yes. But that's a bit unclean, and doing that unnecessarily in a loop for
> > ~300000 iterations is something I'd like to avoid.
>
> String formatting isn't exactly fast anyway, so the conversion would most
> likely be lost in the noise.
Trying the attached program seems to show that it makes up to 30% difference
(in a microbenchmark - not in the real-world-scenario :-)
$ cc -O6 -o pf pf.c
$ ./pf
stg=1799999
diff = 1:018974
diff = 1:340017
(Thats on an Duron 1200)
Thank you!
Regards,
Phil
--
Versioning your /etc, /home or even your whole installation?
Try fsvs (fsvs.tigris.org)!
t: pf
./pf
pf: pf.c
$(CC) -O6 -o $@ $<
#include <sys/time.h>
#include <time.h>
#define RUNS 1800000
void P(struct timeval *a, struct timeval *b)
{
int sec=b->tv_sec - a->tv_sec;
int usec=b->tv_usec - a->tv_usec;
if (usec<0) { usec+=1000000; sec--; }
printf("diff = %d:%06d\n", sec, usec);
}
main()
{
char stg[30];
int i;
struct timeval tv1, tv2, tv3;
struct timezone tz;
gettimeofday(&tv1, &tz);
for(i=0; i<RUNS; i++)
{
sprintf(stg, "%ld \n", (long)i);
}
gettimeofday(&tv2, &tz);
for(i=0; i<RUNS; i++)
{
sprintf(stg, "%Ld \n", (long long)i);
}
gettimeofday(&tv3, &tz);
printf("stg=%s\n", stg);
P(&tv1, &tv2);
P(&tv2, &tv3);
}
_______________________________________________
Autoconf mailing list
[email protected]
http://lists.gnu.org/mailman/listinfo/autoconf