Во всех современных операционных системах (Windows, Linux, BSD и т. Д.) все адреса в приложении пользовательского пространства являются виртуальными адресами. Исключением являются определенные ОСРВ или другие пользовательские приложения без использования металла.
Виртуальные адреса не обязательно случайные , но с точки зрения аппаратного обеспечения они являются произвольными. Ядро, как правило, решает, какое виртуальное адресное пространство выделить для данного запроса сопоставления, иногда принимая во внимание запросы пространства пользователя. Когда используются такие вещи, как ASLR (что является обычным в наши дни), адреса намеренно рандомизируются.
Означает ли это, что массив на самом деле имеет форму «линии» в ОЗУ или он может быть назначен в редких областях, а ОС просто обманывает программиста?
Оба. ОС создает физические-виртуальные отображения страниц памяти, а не отдельных адресов. Размер страницы зависит от архитектуры, но обычно составляет 4 КиБ.
Так, если у вас есть массив 1 КиБ (начальный адрес которого выровнен как минимум на 1 КиБ), он будет физически смежным. Массив 16 КиБ, однако, может быть разбросан по 4 страницам, которые нигде не находятся рядом.