"Two heap implementations simultaneously"?

The web documentation implies that you could use two heap implementations:

FreeRTOS offers several heap management schemes that range in complexity and features. It is also possible to provide your own heap implementation, and even to use two heap implementations simultaneously. Using two heap implementations simultaneously permits task stacks and other RTOS objects to be placed in fast internal RAM, and application data to be placed in slower external RAM.

However, when using the provided implementations (heap_1, etc.), the documentation states that you should only include one of the provided sources files.

Am I correct that to use two different heap schemes you would need to use custom implementations and then work with the linker to assign them to different memory regions?

I didn’t see anyway to set the starting address of any of the provided heap implementations.

If you want task stacks to be placed in fast memory then define pvPortMallocStack() to a memory allocator of your choice (or just statically allocate the stack where you like). That means you have separate heaps for the stack memory (or anything else that uses pvPortAllocateStack()) and anything that calls the standard pvPortMalloc(). You can also have your application using a separate heap again by having application level allocations use the standard malloc().

Just to add, if your use case is to use multiple blocks of memory (probably because they are placed in different RAM regions) as heap, you can also use heap_5 - FreeRTOS - Memory management options for the FreeRTOS small footprint, professional grade, real time kernel (scheduler)