On Sun, 1 Feb 2015 17:51:59 +0800 Erich Dollansky <erichsfreebsdlist at alogt.com> wrote:> Hi, > > I came across this here in utils.c which is part of top: > > > /* > * How do we know that 16 will suffice? > * Because the biggest number that we > will > * ever convert will be 2^32-1, which > is 10 > * digits. > */ > > char *itoa(val) > > register int val; > > int can be 64 bits on a amd64 machine. Why is the author of this code > so sure that we will never cross the 32 bit boundary? > > ErichI thought an 'int' was a 32bit number on amd64 arch. #include <stdio.h> #include <stdlib.h> int main (void) { printf ("%zd\n", sizeof (int)); exit (0); } Paul. -- Paul Koch | Founder, CEO AKIPS Network Monitor http://www.akips.com
Hi, On Sun, 1 Feb 2015 19:57:22 +1000 Paul Koch <paul.koch at akips.com> wrote:> On Sun, 1 Feb 2015 17:51:59 +0800 > Erich Dollansky <erichsfreebsdlist at alogt.com> wrote: > > > Hi, > > > > I came across this here in utils.c which is part of top: > > > > > > /* > > * How do we know that 16 will suffice? > > * Because the biggest number that we > > will > > * ever convert will be 2^32-1, which > > is 10 > > * digits. > > */ > > > > char *itoa(val) > > > > register int val; > > > > int can be 64 bits on a amd64 machine. Why is the author of this > > code so sure that we will never cross the 32 bit boundary? > > > > Erich > > I thought an 'int' was a 32bit number on amd64 arch.the problem is that top is not a x86 only program but should work on all platforms. Leaving this like it is might will cause problems when int becomes more than 32 bits wide. Of course, if it is known that the value to be converted will always be within 32 bits, it is not a problem to do it as it is done.> > > #include <stdio.h> > #include <stdlib.h> > > int > main (void) > { > printf ("%zd\n", sizeof (int)); > exit (0); > } >Yes, this is the reason why it works on 32 bit platforms and also on amd64. Erich
Paul Koch wrote:> On Sun, 1 Feb 2015 17:51:59 +0800 > Erich Dollansky <erichsfreebsdlist at alogt.com> wrote: > > >> Hi, >> >> I came across this here in utils.c which is part of top: >> >> >> /* >> * How do we know that 16 will suffice? >> * Because the biggest number that we >> will >> * ever convert will be 2^32-1, which >> is 10 >> * digits. >> */ >> >> char *itoa(val) >> >> register int val; >> >> int can be 64 bits on a amd64 machine. Why is the author of this code >> so sure that we will never cross the 32 bit boundary? >> >> Erich >> > > I thought an 'int' was a 32bit number on amd64 arch. >IIRC reading at least one of the C 'standards' (don't recall if it was ANSI or C99) sizeof(int) has to be determined at runtime time because it could be 8, or 16 bit and that wasn't dependent on the arch type, it was dependent on the compiler (and maybe other factors.) Unfortunately when I queried this with a Uni Prof as to why, I was told, mostly its 16 bits but you should always check if you have something that cares (where it matters.) -- Michelle Sullivan http://www.mhix.org/