Hacker Newsnew | past | comments | ask | show | jobs | submitlogin

How can C++ compilation be slow if Arduino doesn't even use templates and the final binary is to fit in 32kb of ROM? If anything, recompiling all cpp files instead of individual object files with a link step shouldn't even have a noticeable speed difference


Yeah I don't even have a build system for my embedded C++ projects targeting 32-128K flash systems.

A main.cpp that includes all other .cpp files and a build.bat that recompile everything, it's always been instant.

And I do use a some amount of template and constexpr for peripheral setup code (computing all the constant values for GPIO config registers with a nice "DSL" of sort for example).


I have a significant C++20 app on zephyr (an RTOS), and it compiles to 65k on zephyr on an ARM board, and, with stripped/lto/etc to about 300k on ARM desktop (debug binaries are much larger, so it's not that). The only difference in code between the two (impressively for zephyr, IMHO) is some small GPIO/device abstractions to account for zephyr vs linux[1]. None of those take up any meaningful amount of code.

It all compiles nearly instantly. So you can have large apps that work fine in that space and time.

I haven't debugged the differences in compile options, etc. I suspect it is related to constant data handling differences (they both have the same RTTI, exceptions settings. They both use the same GCC version). But IMHO there can be very wide variation in the size of literally the same code.

In the case of arduino, they don't provide you anything that could be used to flamegraph it, but i suspect it's just recompiling a significant part of mbed each time or something.

The non-Mbed based ones are faster to compile for sure.

[1] The one thing Zephyr does not yet support is std::thread/std::mutex, but it's really easy to make it work in your app because the build system functions properly, so i did and sent them patches as an example. They are working on proper support in the toolchain. Just need to rebuild it with some different config flags and twiddle a few files. MBed fully supports std::thread/etc if i remember right.


Templates on their own aren't that slow, what is slow is doing crazy meta-programming tricks with them at compile time all over the place.


From my experience about 7 years ago, it was 10-100x faster under Linux (minutes compared to seconds), even though the Windows machine was way more powerful. Maybe file accesses are slowed down by something like an antivirus?




Consider applying for YC's Winter 2026 batch! Applications are open till Nov 10

Guidelines | FAQ | Lists | API | Security | Legal | Apply to YC | Contact

Search: