Where in memory are string literals ? stack / heap? [duplicate]
The string literal will be allocated in data segment. The pointer to it, a
, will be allocated on the stack.
Your code will eventually get transformed by the compiler into something like this:
#include <stdio.h>const static char literal_constant_34562[7] = {'t', 'e', 's', 'a', 'j', 'a', '\0'};int main(){ char *a; a = &literal_constant_34562[0]; return 0;}
Therefore, the exact answer to your question is: neither. Stack, data, bss and heap are all different regions of memory. Const static initialized variables will be in data.
a
itself (the pointer) is defined as a local variable (implicitly) using the auto
storage class, so it's allocated on the stack (or whatever memory the implementation uses for stack-like allocation -- some machines, such as IBM mainframes and the first Crays, don't have a "stack" in the normal sense).
The string literal "tesaja" is allocated statically. Exactly where that will be depends on the implementation -- some put it with other data, and some put it in a read-only data segment. A few treat all data as read/write and all code as read-only. Since they want they string literal to be read-only, they put it in the code segment.