На ноутбуке с 4 ГБ оперативной памяти я думал, что адреса памяти должны начинаться с байта 0
и заканчиваться до него 0x1_0000_0000
(_ — это добавленный разделитель для ясности), но MemTest86 говорит, что он заканчивается на 0x1_6060_0000
, но разве это не на 1542 МБ больше?
Аналогично, на настольном компьютере с 16 ГБ оперативной памяти, я думаю, что он должен заканчиваться на 0x4_0000_0000
, но MemTest86 показывает 0x4_2F60_0000
, что на 758 МБ больше.
Почему MemTest86 показывает адресные пространства, превышающие фактический объем физической памяти?
решение1
Это очень распространенная ситуация в современных системах. И на то есть веская причина.
С тех пор, как несколько десятилетий назад компьютеры имели аппаратные устройства с отображением памяти. Это специальное оборудование, к которому процессор может получить доступ так же, как если бы оно было памятью. Оно используется для быстрой связи с аппаратными устройствами, такими как видеосистема. Без этого компьютеры бы сильно страдали от потери производительности.
Для совместимости с 32-разрядными операционными системами это отображаемое в памяти оборудование должно появляться в нижнем диапазоне адресов 4 ГБ. В современных системах это означает несколько сотен МБ, как минимум, что весьма существенно. Поскольку отображаемое в памяти оборудование и ОЗУ не могут существовать по тем же адресам, значительная часть ОЗУ будет недоступна. Вот почему 32-разрядные версии Windows не могут видеть все 4 ГБ ОЗУ.
Это нехорошая ситуация. Но есть решение, по крайней мере для тех операционных систем, которые могут с этим справиться. Решение состоит в том, чтобы переназначить те части ОЗУ, которые в противном случае были бы недоступны, на адреса выше 4 ГБ. Это то, что вы видите. Для 32-разрядных операционных систем как можно больше ОЗУ будет оставлено на адресах ниже 4 ГБ.
Это перераспределение памяти выполняется аппаратным обеспечением компьютера и BIOS, поэтому оно доступно для любой операционной системы. Современные 64-разрядные операционные системы и программы тестирования памяти разработаны для этого. По техническим причинам 32-разрядные клиентские версии Windows будут игнорировать всю память свыше 4 ГБ. В современных операционных системах приложения никогда не видят физические адреса ОЗУ, поэтому распределение памяти их не волнует.