Алоха. Я вот задумался. Вики сообщает: «<...>Допустимые в реализациях физические и математические адреса часто ограничены значениями 48 бит (256 терабайтов)<...>», это значит что я могу в своей программе использовать диапазон адресов 0x000000000000-0xFFFFFFFFFFFF и таким образом объём виртуальной памяти составляет 256 ТБ? Но ведь фактически её то меньше (включая swap)
Я низкоуровневым программированием не занимался никогда, поэтому мне эта ситуация не вполне понятна. Получается что верно одно из следующих утверждений:
1. ОС позволяет работать программе с 256 ТБ. Но это невозможно
2. Диапазон адресов виртуальной памяти ограничен её фактическим объёмом и команда mov 0xFFFFFFFFFFFF 0xFFFFFFFFFFFE всегда будет давать ошибку, так как это выходит за объём доступной памяти
3. Пустые страницы не занимают объёма, таким образом мы можем обращаться к любому адресу, пока памяти хватает. Но тогда получается, что программа оперирует со слишком длинным диапазоном, что наверное может создать некоторые трудности.
Так как же сделано на самом деле?