Очевидно, что memtest86 + не может проверить область памяти, которая в настоящее время содержит исполняемый код memtest86 + (но если в этой области есть ошибки памяти, весьма вероятно, что сам тест завершится сбоем). Тем не менее, memtest86 + может перемещать свой собственный код по другому адресу во время выполнения, и с помощью этого трюка он может проверить всю память, которую ему разрешено использовать для прошивки (BIOS), но не все сразу.
Это перемещение кода описано в файле README.background внутри архива исходного кода memtest86 + (файл немного устарел - например, в нем говорится, что адреса, используемые для кода memtest86 +, это 0x2000 и 0x200000, но низкий адрес, определенный в источнике, фактически 0x10000, а старший адрес - 0x2000000 или 0x300000 в зависимости от объема памяти в машине).
Но даже с этим трюком перестановки memtest86 + не может проверить всю память по следующим причинам:
Обычно микропрограмма (BIOS) резервирует некоторые области ОЗУ для собственного использования (например, таблицы ACPI). В то время как ЦП может получить доступ к этим областям ОЗУ, запись чего-либо в них может привести к непредсказуемому поведению.
Некоторая часть ОЗУ используется для режима управления системой и даже недоступна для ЦП вне привилегированного кода SMM.
Диапазон адресов ОЗУ от 640 КБ до 1 МБ недоступен из-за особенностей устаревшей структуры памяти ПК (часть этой ОЗУ может использоваться как тень для ПЗУ BIOS и для SMM, другие части могут быть полностью недоступны).