All of each processes memory is private to that process (baring use of mmap() or sys V shared memory, and excepting read-only and COWd pages which will appear to be private anyway...)
The rest of this is IIRC. The data segment is toward the bottom (low addresses) of your memory and the heap is above that, growing upwards. The stack is towards the top and grows downwards. It grows implicitly; that is, the process attempts to write to the page just below the limit of the current stack, causing a page fault, and the kernel allocates a page into that place before returning control to the process, just before the store which caused the fault. (This means the store sort of happens twice.)
You can get some more empirical information by printing addresses of variables you've put on the stack. e.g.
printf("address of foo is %p, address of bar is %p\n", &foo, &bar);
If the function is called recursively or you have several functions like this which call eachother, you should see the addresses grow downward.