There are only two main types of memory in any microprocessor system, volatile and nonvolatile memory. The volatile memory will loose the content when the power goes off, and the nonvolatile memory will keep the contents 'forever'.
That said, there are numerous implementations, or variants of each type in a microprocessor system.
RAM or Random Access Memory, is a volatile memory and in your list most of the 'types' are of this kind. 2, 3, 4, 6, and possibly 7, are of the RAM type. 1) CPU memory can be several types depending on the CPU in question, but normally it will be RAM type.
ROM or Read Only Memory is a non volatile memory, and will normally hold the program code and constant parameters in the program.
This memory can be of several basic types, like Flash, EPROM, EEPROM.
The microprocessor or CPU may contain several types of these types internally, as well as address them externally. All memory are addressed as blocks of different size in a sequential address space. The program and the CPU datasheet will define where the different types resides in this address space, and what they are used for.
Register memory will normally be defined by the CPU hardware, or in some cases just be a part/ block of the RAM defined for this use.
Heap memory is normally the rest of not defined RAM memory that may be used dynamically by the running programs.
Stack memory is only a block of RAM memory defined for this purpose. It is also common to let the heap and the stack share the same block of unused memory, since the heap is growing from low to high and the stack is growing from high to low memory addresses. This may be dangerous if your program need more dynamic memory than available, and will then result in a program crash.