Unless it's a janky/non-standard compiler, there will be a C runtime that initializes variables with values before main() is called even on embedded systems. That's the case with the most popular C compilers for AVR and PIC microcontrollers and with other microcontroller C compilers like SDCC/Z88DK. It's usually just a memcpy() (or often an inlined equivalent) from the read-only program space to RAM. There's no good reason (in my mind) not to properly support initialized global variables—it won't save code space since the programmer would have to do it in main() anyway.