Обычно это делается с помощью аппаратного обеспечения.
Подсистеме виртуальной памяти оборудования можно указать помечать страницу как доступную только для чтения.Когда приложение пытается записать страницу, доступную только для чтения, аппаратное обеспечение генерирует ошибку, которую отлавливает ОС.ОС может сказать, что приложение попыталось написать страницу только для чтения и завершить вашу программу.
Таким образом, ОС / загрузчик следит за тем, чтобы страницы, на которых находятся строковые литералы, были помечены как доступные только для чтения.
Куча и постоянная память - это ортогональные проблемы.