Já o sistema operacional está bem ciente destes conceitos e é fundamental que eles possuam alguma forma, mesmo que limitada, para manipular a memória das aplicações, principalmente nos sistemas modernos e de utilidade geral. Os sistemas modernos possuem um gerenciamento complexo através do que se convencionou chamar de memória virtual que também é um conceito abstrato, muitas vezes mal compreendido.
Em Assembly ou C é muito comum ter contato com esse gerenciamento de memória. Em Assembly é comum manipular o stack quase diretamente e em ambas linguagens pelo menos a alocação e desalocação do heap devem ser feitas manualmente através da API do sistema operacional. Em C o stack é gerenciado pelo compilador, salvo alguma operação incomum que seja necessária.
Nada impede que se use alguma biblioteca que abstraia essa manipulação, mas isso só é comum em linguagens de mais alto nível. De fato é muito comum que outras linguagens usem internamente a API do OS para fazer o gerenciamento pesado da memória mas o acesso da memória no "varejo" é feito por um gerenciador próprio, em geral chamado de garbage collector através de técnicas de contagem de referências para um objeto no heap (há quem considere que isto não é uma técnica de garbage collector) ou de verificação posterior se há referências para o objeto no heap. Mesmo usando uma biblioteca mais abstrata, os conceitos permanecem.
Quanto mais alto nível, menos precisam gerenciar tudo isso, mas entender o funcionamento geral é importante em todas linguagens.