The standard does not specify where string literals will reside but most likely it would be in the read only data section. For example on a Unix system using objdump
you can inspect the read only data section like this:
objdump -s -j .rodata a.out
and using a Live Example we can see output similar to this:
Contents of section .rodata:
400758 01000200 4d657367 20310073 74723120 ....Mesg 1.str1
400768 3d202570 0a004d65 73672032 00737472 = %p..Mesg 2.str
400778 32203d20 25700a00 26737472 33203d20 2 = %p..&str3 =
400788 25700a00 26737472 34203d20 25700a00 %p..&str4 = %p..
The C99 draft standard section 6.4.5
String literals paragraph 5 says:
[...] The multibyte character sequence is then used to initialize an array of static storage duration and length just sufficient to contain the sequence.[...]
which means the lifetime of the string literal is the lifetime of the program and paragraph 6 says:
It is unspecified whether these arrays are distinct provided their elements have the appropriate values. If the program attempts to modify such an array, the behavior is undefined.
So we don't know if they are distinct, that is going to be an implementation choice but we do know that we can not modify them. Otherwise it does not specify how they should be stored.