Нарушения доступа к памяти являются большой темой:)
Защита информации в компьютерных системах (с 1973 :) лежит в основе механизма сегментов ,где процессам выделены base и bound ;любая попытка получить доступ к памяти за пределами диапазона base:base+bound
означала, что программа сделала что-то глупое и должна быть убита.
Линейка процессоров 80x86 обеспечивает базовую поддержку сегментов и ядро безопасности GEMSOS это ядро операционной системы, сертифицированное A1, основанное на этом механизме.
Но сегменты не очень динамичны, и почти все современные операционные системы - это системы подкачки , то есть страница в памяти, когда она недоступна.Это основывается на ЦП, имеющем MMU , блок управления памятью, который проверяет все обращения к памяти на предмет правильных привилегий и наличия / отсутствия правильного отображения памяти.Когда процесс пытается получить доступ к памяти, которая в данный момент не отображается в ОЗУ, MMU сообщает ЦПУ о том, что произошла ошибка, и ЦП приостанавливает процесс для загрузки запрошенной страницы памяти с диска.(Или, если память не должна отображаться для процесса, скажем, он пытается получить доступ к 0x0
или к какой-либо произвольной ячейке памяти, которая не была сопоставлена с mmap
или подобными примитивами, выделяющими память, это убивает процесс.)
Intel 80386 был первым чипом Intel с поддержкой подкачки страниц, поэтому «386 Enchanced Mode» в Windows 3.1 был , поэтому намного лучше, чем режим 286.
Компиляторына самом деле не задействованы, но процессор, MMU и ядро операционной системы должны все работать вместе.