Операционная система выделяет память приложению в страницах (обычно 4 КБ).Для эффективности можно использовать Огромные Страницы (например, 2 МБ)
Первая страница 0 никогда не выделяется, и если вы когда-либо пытаетесь получить к ней доступ, вы получаете ошибку сегментации.например, доступ к любому указателю от 0 до 4095 приведет к ошибке сегментации в большинстве систем.
Однако, как только вам была выделена страница, вы можете читать и записывать любую часть этой страницы без ошибки сегментации.(Кодовые страницы обычно защищены от записи)
Когда вы используете malloc, он гарантирует, что нужные вам страницы есть.Однако вы можете просто получить доступ к имеющейся у вас памяти и изменить ее по своему усмотрению.(Предполагая, что вы знали, сколько это было)
Обычно это более опасно, чем полезно, но это может помочь объяснить, почему неправильный доступ к памяти не гарантирует ошибку сегментации.
Примечание: malloc имеет небольшую структуру, например, 8 байт, в начале каждого выделенного блока памяти перед самим блоком, если вы его повредите, то malloc
и free
не будут работать правильно.