Wow, ok I guess I have a lot more to learn.
I think it depends on how low level you want to go. The benefit of using these kind of languages is that they abstract away the hardware so that you don't have to worry about the details. Granted details can matter when you're trying to push performance to the limits or be incredibly efficient, but that's so rare for people to do because it can be very time consuming and on modern CPUs, a compiler can often do optimizations that are better than a human would, especially when taking in to account advanced CPU features. With Out of Order Execution, branch prediction, pipeline flushes, and so on, trying to manually optimize stuff at a low level can result in things actually being less efficient (on a modern CPU) even though it would have been more efficient on a 1980s CPU (granted, my current hobby project is with a CPU popular in the 1980s -- Motorola 68K).
What I think is related to stack vs heap that's actually worth learning:
- new/malloc are slow
- pointers (don't worry about stack vs heap for this)
- variable scope/lifetime -- memory allocated via new/malloc stays allocated until it is deallocated with delete/free. Messing this up can cause memory leaks or other types of bugs and from what I understand, something that Rust is supposed to do better (but I've not looked at Rust, so don't really know for sure)
I think those are necessary. If you're wanting to go a little deeper on memory stuff, but not quite down to assembly, you could learn about memory pages/page tables/how operating systems handle memory allocations/virtual memory. Those topics are not C or C++, but more general computer/OS.