Я думаю, что стек и куча относятся к различным разделам виртуальной памяти процесса, где один растет вверх, а другой - вниз. Адреса физической памяти (в форме страниц) сопоставляются с этими виртуальными адресами. AFAIK, адресация виртуального адресного пространства составляет от 0x00000000 до 0xFFFFFFFF, что огромно. Поскольку область между стеком и кучей очень большая (скорее всего, намного больше, чем фактическая физическая память на компьютере), я не думаю, что стек и куча когда-либо встретятся друг с другом. Кроме того, что ограничивает объем памяти, который программа может запросить у ОС?