Stack, frame pointer, heap

A frame pointer, on the other hand, usually points to the beginning
of the storage space allocated for any one function, and does not
change during the execution of that function.

As far as I know, while calling function, calling function knows the address ,By offset from the frame pointer.Frame pointer is choosed for this purpose because its constant and don’t move like stack pointer.

I have two questions:

1-I know for every calling, a new frame created.Does it mean that every frame has its own frame pointer?

2- about heap,If there is not any static member or using function like allocate(), Then there is no heap?becuase I read heap keeps these.

3-According this site:

Processes are divided into three regions:
Text, Data, and Stack.

Does it mean that heap is not necessary ?