Во многих операционных системах стек и куча начинаются с противоположных сторон виртуального адресного пространства процесса и растут навстречу друг другу.Это позволяет стеку максимально расширяться без попадания в кучу.
Предположим, у меня есть программа, которая вызывает переполнение стека.Мое текущее понимание состоит в том, что это приведет к тому, что стек будет бесконтрольно расти в направлении кучи и в конечном итоге попадать в нее.Это правильно?Если это так, как операционная система обнаруживает переполнение стека?Похоже, ОС не сможет обнаружить, что программа пытается использовать виртуальную память, выделенную для кучи, как часть стека, так как они находятся в смежных областях памяти.
Я знаю, чтоэто зависит от операционной системы, но понимание механизма, с помощью которого это происходит в любой операционной системе, определенно было бы полезно.Это беспокоило меня некоторое время, и я не могу найти хороших объяснений.