heap vs data segment vs stack allocation

// Array allocated on the stack and initialized with "SomeText" string.
// It has automatic storage duration. You shouldn't care about freeing memory.
char text1[] = "SomeText"; 

// Pointer to the constant string "Some Text".
// It has static storage duration. You shouldn't care about freeing memory.
// Note that it should be "a pointer to const".
// In this case you'll be protected from accidential changing of 
// the constant data (changing constant object leads to UB).
const char* text2 = "Some Text";

// malloc will allocate memory on the heap. 
// It has dynamic storage duration. 
// You should call "free" in the end to avoid memory leak.
char *text = (char*) malloc(strlen("Some Text") + 1 );

Yes you are right, on most systems:

text1 will be a writable variable array on stack (it is required to be a writable array)

text2 has to be const char* actually, and yes, it will point to a text segment of the executable (but that might change across executable formats)

text will be on heap

Tags:

C++

Stack

Heap