News for hackers. Stuff that matters.
Re:KolibriOS – operating system written entirely in assembly... by m463 on Wednesday April 15, 2020 @08:23AM (#22876865)
I was thinking the same thing.

Then I sort of turned the problem around in my mind.

When is a compiler prevented from optimizing? Maybe pointer aliasing?

Another thing I wondered. I've written hello.c and it's about 84 bytes of C and 8.3k as an executable. Would hand-coded assembler be that large?

maybe it's that compilers CAN do well, but because of requirements, they can't do some things well and necessarily create a lot of "boilerplate infrastructure".

Re:KolibriOS – operating system written entirely in assembly... by jsjohnst on Wednesday April 15, 2020 @09:26AM (#22877421)
> I've written hello.c and it's about 84 bytes of C and 8.3k as an executable. Would hand-coded assembler be that large?

The answer is generally no. A lot of that overhead is due to the C std library. If memory serves from a blog post I read long ago, with very very aggressive tuning, you can get a hello world binary down under 50 bytes (which is smaller than the ELF header). A “normal” ASM coded “hello world” binary could easily be in the range of a few hundred bytes without anything special.

Re:KolibriOS – operating system written entirely in assembly... by ajxs on Wednesday April 15, 2020 @08:18PM (#22884740)
You can use the `-S` switch with gcc to produce the intermediate assembler representation of your C program instead of binary output. From there you can see for yourself what optimisation has been performed and what hand optimisations are possible.

I just compiled my own 'hello.c' on Linux, with the optimisation flag set for 'code size', and the binary weighed in around 8.3k. I then removed the `printf` call and the inclusion of `stdio.h`. The resulting binary was 8.1k. This is exactly as expected. Why would the inclusion of a call to a dynamic library bloat the final binary size?

Re:KolibriOS – operating system written entirely in assembly... by jsjohnst on Wednesday April 15, 2020 @10:37PM (#22885500)
> Why would the inclusion of a call to a dynamic library bloat the final binary size?

Here’s two good links to read on it:

https://www.muppetlabs.com/~breadbox/software/tiny/teensy.ht...

http://timelessname.com/elfbin/

Re:KolibriOS – operating system written entirely in assembly... by m463 on Wednesday April 15, 2020 @02:53PM (#22881548)
I looked a little further.

hello.c: 4 loc, 84 bytes

hello.s: 30 loc, 517 bytes

hello: 8.3k

so it must be data structures for linking.

oh, and if I use -static, hello becomes 844704 bytes. :)