Where in memory are string literals ? stack / heap?

Possible Duplicate:
C String literals: Where do they go?

As far as I know,

generally, pointer have to be allocated by malloc(), and will be allocated to heap, then unallocated by free();

and

non pointer(int,char,float,etc..) will be allocated automatically to stack, and unallocated as long as the function go to return

but, from following code :

#include <stdio.h>

int main()
{
char *a;

a = "tesaja";

return 0;
}

where will a allocated to ? stack or heap ?


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', ''};

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.

链接地址: http://www.djcxy.com/p/79840.html

上一篇: 为什么你会想要在堆上有一个数组?

下一篇: 内存中的字符串文字是什么? 堆栈/堆?