First, a small disclaimer, I don’t use the MPU/Protected task feature much, so I am not real familiar with it.
The basic thing to remember is that FreeRTOS starts as a simple RTOS, designed for a single simple processor, and then uses add-on code to support things like memory protection. As such, the ‘default’ task would be ‘priviledged’ and restricted tasks need to be somewhat special cased. One big implication of this is that FreeRTOS itself only provides/supports a single heap to make its objects/stack space from, and if restricted tasks could access that memory, they wouldn’t be that restricted, so the heap is really only for privileged task, and restricted tasks need to be created specially (which allows their memory to be aligned in a way to make them restricted). Since restricted tasks can’t access the memory in the FreeRTOS heap, there is no reason to allow them to allocate memory from that heap.
Making two heaps doesn’t help a lot either, as that says that one restricted task is able to interfere with another restricted task, which is normally not desired when using the MPU. Really, each restricted task that needs dynamic memory, should have its own heap carved out of the tasks personal memory segment (the one its stack is located in) to keep itself restricted.