Where in memory are string literals ? stack / heap? [duplicate] Where in memory are string literals ? stack / heap? [duplicate] c c

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.