Сырой компьютер в основном просто имеет память с физическими адресами, начинающимися с 0, верно? Тогда кто-то может написать код сборки (например, BIOS) и фактически установить значение в 0.
Теперь, если есть BIOS, который запускает компьютер, тогда кто-то может написать загрузчик для операционной системы. Может ли этот человек решить переместить фактические значения в позицию 0 в памяти на ассемблере?
Что если они используют C или C ++? Могут ли они иметь указатель со значением 0 и использовать его для доступа к первой ячейке памяти? Для этого нужен специально адаптированный компилятор?
И тогда операционная система выходит на сцену. Он имеет диспетчер памяти, который вызывается malloc
, чтобы получить больше памяти. Может ли быть написана операционная система, которая может просто использовать нулевые указатели в качестве обычных указателей, но в остальном ведет себя точно так же, как Linux, и тогда, если кто-то скомпилирует программу на C с обычным неизмененным GCC для нее, нулевой указатель не приведет к сегментации неисправность?