明らかに、memtest86 +は、現在memtest86 +実行可能コードを含むメモリ領域をテストできません(ただし、その領域にメモリエラーがある場合、テスト自体がクラッシュする可能性が非常に高くなります)。ただし、memtest86 +は実行時に独自のコードを別のアドレスに再配置できます。このトリックを使用することで、ファームウェア(BIOS)で使用を許可されているすべてのメモリをテストできます。
このコードの再配置は、memtest86 +ソースコードアーカイブ内のREADME.backgroundで説明されています(ファイルは少し古くなっています。たとえば、memtest86 +コードに使用されるアドレスは0x2000および0x200000ですが、ソースで定義されている下位アドレスは実際には0x10000で、上位アドレスはマシンのメモリ量に応じて0x2000000または0x300000です。
ただし、この再配置トリックを使用しても、memtest86 +は次の理由ですべてのメモリをテストすることはできません。
通常、ファームウェア(BIOS)は、独自の使用のためにいくつかのRAM領域(ACPIテーブルなど)を予約します。これらのRAM領域はCPUからアクセスできますが、何かを書き込むと、予期しない動作が発生する可能性があります。
RAMの一部はシステム管理モードに使用され、特権SMMコード以外のCPUからもアクセスできません。
640Kから1MまでのRAMアドレス範囲は、レガシーPCメモリレイアウトの癖によりアクセスできません(このRAMの一部はBIOS ROMおよびSMMのシャドウとして使用される場合があり、他の部分は完全にアクセスできない場合があります)。