Conversation

Replying to
Technically, they are correct. You have the stack pointer, you can put data there and increase the pointer. That’s it. On heap, the OS’s memory management has to search for the right page, find an empty one, etc., etc.
1
A secondary thread call stack and memory obtained by a userspace allocator are typically obtained from the OS the same way. You can use memory from a userspace allocator as a call stack or memory on the stack as the backing for a userspace allocator. It's about how it's used.
1
Rust notably used to dynamically allocate stacks in chunks from a userspace allocator instead of as a mapping with a guard page and stack probes to detect all the space being exhausted. It could still get an out-of-memory error and exhaust the stack but it wasn't fixed size.