ну вот предположим есть у нас детект того, что программа больше, чем надо памяти съела. что мы ей сделаем? заставим VirtualAlloc вернуть ошибку? практика показывает, что 99 процентов софта от такого поведения падает по unhandled exception. да и сама восьмёрка/десятка уходит в BSOD с колоссальными потерями данных (!), если памяти мало (про серверы не знаю).
готовых решений мне не известно. но гонять в цикле QuerySystemInformation, и как-нибудь говорить программе, что, мол, хватит, вплоть до TerminateProcess/CreateProcess - это пара страниц кода. А может и готовые решения на гитхабе есть. или можете яндексом delphi, QuerySystemInformation, delphi, Как убить/как запустить процесс. Паскаль же наверняка где нибудь был?