At a guess the compiler would put them in a literal pool in ROM, and access them with the LDR R0,[PC,offset] instruction (it's an ARM, I assume others do the same). The routine that displays them doesn't need to copy the string, it just needs to know the start address and either length or terminating character, then it sends one character at a time to the display.Where do you think strings you've created at compile time exist? In the symbol table. During execution (aka 'runtime') the must exist in RAM. Your display routine should accept a pointer to the string as an argument, not a string. Just FYI.
If I declared them all as char* arrays, it would also put the in a different bit of the ROM and the effect would be the same.