tech-userlevel archive

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]

Re: Trivial program size inflation



> On Jun 30, 2023, at 11:30 PM, tlaronde%polynum.com@localhost wrote:
> 
> Le Fri, Jun 30, 2023 at 01:37:10PM -0400, Mouse a écrit :
>> Based on something at work, I was looking at executable sizes.  I
>> eventually tried a program stripped about as far down as I could:
>> 
>> int main(void);
>> int main(void)
>> {
>> return(0);
>> }
>> 
>> and built it -static.  size on the resulting binary:

Ok, so:

the-ripe-vessel:thorpej 10$ cat nop.c
int main(void) { return 0; }
the-ripe-vessel:thorpej 11$ cc -static nop.c
the-ripe-vessel:thorpej 12$ size a.out       
   text    data     bss     dec     hex filename
 581799   28928 2176553 2787280  2a87d0 a.out
the-ripe-vessel:thorpej 13$ cc --version
cc (nb1 20210411) 10.3.0
Copyright (C) 2020 Free Software Foundation, Inc.
This is free software; see the source for copying conditions.  There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.

the-ripe-vessel:thorpej 14$ 

Should be pretty trivial to see what’s in there…

the-ripe-vessel:thorpej 15$ nm a.out | wc -l
    1073
the-ripe-vessel:thorpej 16$ nm a.out | grep printf
0000000000470176 T __vfprintf_unlocked_l
000000000046e96d T _snprintf
000000000046e9fc T _snprintf_l
0000000000410319 T _snprintf_ss
0000000000474706 T _vfprintf_l
000000000046e95b T _vsnprintf
000000000046e720 T _vsnprintf_l
000000000046d440 T _vsnprintf_ss
00000000004370cf T je_malloc_cprintf
0000000000437151 T je_malloc_printf
0000000000436fcc T je_malloc_snprintf
000000000043704e T je_malloc_vcprintf
0000000000434da1 T je_malloc_vsnprintf
000000000046e96d W snprintf
000000000046e9fc W snprintf_l
0000000000410319 W snprintf_ss
00000000004746b1 T vfprintf
0000000000474706 W vfprintf_l
000000000046e95b W vsnprintf
000000000046e720 W vsnprintf_l
000000000046d440 W vsnprintf_ss
the-ripe-vessel:thorpej 17$ 

Hmmm, who is calling stdio routines here?

the-ripe-vessel:thorpej 19$ nm a.out | grep "je_" | wc -l
     392
the-ripe-vessel:thorpej 20$ 

Oh look, the entirety of jemalloc seems to be included in the binary.  WTF knows why that’s happening, but apparently it is, and jemalloc pulls in a ton of additional stuff.

Someone should maybe take a look into that.

-- thorpej



Home | Main Index | Thread Index | Old Index