&gt; Now, on reverse stack, my memory is cloudy. Common stacks have incoming data flow toward the stack pointer in a way that can clobber it, even leading to hacks.<p>That&#x27;s not a restriction of C, but a way to get more out of your memory on a restricted system; If your heap grows up and your stack grows down (or vice versa), then you can keep using growing both until the two meet, at which point you&#x27;ve used all the available memory. However, if they both grow in the same direction, you need to statically decide how much to give each one, which will lead to waste if you&#x27;re not using much stack or heap:<p><pre><code>    [heap--&gt;|           |&lt;--stack]
</code></pre>
vs:<p><pre><code>    [heap--&gt;|    |stack--&gt;|      ]
</code></pre>
But, again, not something that C cares about; you have a number of architectures like Alpha (IIRC) where the program break and the top of stack move in the same direction.