Path: csiph.com!eternal-september.org!feeder.eternal-september.org!reader01.eternal-september.org!.POSTED!not-for-mail From: Keith Thompson Newsgroups: comp.lang.c Subject: Re: on gdb's sizeof versus gcc's sizeof Date: Thu, 26 Sep 2019 13:08:31 -0700 Organization: None to speak of Lines: 55 Message-ID: References: <867e5vkgw2.fsf@example.com> Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii Injection-Info: reader02.eternal-september.org; posting-host="f32ca35090122da7ee7946de45934628"; logging-data="29858"; mail-complaints-to="abuse@eternal-september.org"; posting-account="U2FsdGVkX187qwVBBGpDIikVuWyDU0uM" User-Agent: Gnus/5.13 (Gnus v5.13) Emacs/23.1 (gnu/linux) Cancel-Lock: sha1:95oR2Laua2OIN8Wk0Pcda4iNWLQ= sha1:Fq8ectxQIGXqmFl2Zr5GG+HpiC0= Xref: csiph.com comp.lang.c:146363 scott@slp53.sl.home (Scott Lurndal) writes: > Louis Valence writes: >>Can you explain this? I don't get it. >> >>%cat sizeof-long.c >>#include >> >>int main() { >> printf("sizeof unsigned long: %ld\n", sizeof (unsigned long)); >> printf("sizeof long: %ld\n", sizeof (long)); >>} >> >>%./sizeof-long >>sizeof unsigned long: 8 >>sizeof long: 8 >> >>%gdb >>GNU gdb (Ubuntu 8.0.1-0ubuntu1) 8.0.1 >> >>[...] >> >>(gdb) p sizeof (unsigned long) >>$1 = 4 > > You may want to use a 64-bit build of GDB instead of the 32-bit: > > (gdb) print sizeof(unsigned long) > $1 = 0x8 > (gdb) quit I don't believe that's the issue. Were you debugging a program when you got that result, or did you invoke gdb with no arguments as Louis and I both did? On my system: $ echo 'print sizeof (long)' | gdb GNU gdb (Ubuntu 8.1-0ubuntu3.1) 8.1.0.20180409-git [...] This GDB was configured as "x86_64-linux-gnu". [...] (gdb) $1 = 4 (gdb) quit $ As far as I can tell, gdb uses the environment of the program it's debugging, falling back to some default environment if it's not given a program to debug. In that default -- at least on my system -- long is 4 bytes. -- Keith Thompson (The_Other_Keith) kst-u@mib.org Will write code for food. void Void(void) { Void(); } /* The recursive call of the void */