Обычно среда выполнения C использует различные API-интерфейсы ОС для выделения памяти, которая является частью его адресного пространства процесса. Внутри этой выделенной памяти он создаст кучу и выделит из нее кучу памяти через вызовы malloc или new .
Причиной этого является то, что часто API-интерфейсы ОС детализированы и требуют, чтобы вы выделяли память большими кусками (например, размером страницы), в то время как ваше приложение обычно хочет выделять небольшие объемы памяти одновременно.