Прежде всего, чтобы было понятно, malloc
возврат 0 означает сигнал об ошибке.
В большинстве современных операционных систем виртуальное адресное пространство (адреса, используемые в программе) не совпадают с физическим адресным пространством (реальные адреса, которые понимает память). Большинство современных операционных систем используют пейджинг. Таким образом, адреса, используемые в программе (например, адрес, возвращаемый malloc
), не совпадают с физическими. В ОС есть некоторый механизм для установления соответствия между ними.
ОС просто не должна ничего сопоставлять по физическому адресу 0 для обычного процесса , и этот адрес всегда будет недействительным, если процесс попытается получить к нему доступ. Сама ОС, для собственного удобства, может получить доступ к памяти по адресу 0, если она того пожелает.