最近我发现我的一个内存条有坏字节。在此之前,我怀疑是其他硬件的问题,于是重新安装了 Windows,并将文件从一个磁盘复制到另一个磁盘。
如果复制缓冲区偶尔与坏的内存区域重叠,是否有可能我的许多文件被损坏?
或者 Windows 中对此有一些保护?
更新
我的系统崩溃了,报告内存损坏。我使用 Windows 内存测试没有发现任何错误(或者错误可能不是永久性的),但免费版 MemTest86 在简单测试 #3 中显示内存错误。
答案1
在消费级台式机系统上,不会。只要成功检索到不正确的数据,就不会检测到损坏的内存数据。我知道这听起来很矛盾,但完全有可能。内存控制器将数据视为黑匣子 - 它不知道或不关心数据是什么,它只是遵循完成 DRAM 进出传输的协议。如果遵守协议并且数据成功存储在 DRAM 中和如果在检索数据时没有违反协议,那么内存控制器就不知道 DRAM 中出了什么问题。它不会检查内容以确保它与存储时相同。操作系统也不会这样做。只有在出现以下情况时,才会向用户显示蓝屏死机:违反协议在内存传输过程中,或者如果你不幸操作系统代码/数据被坏的 DRAM 损坏,那么 BSOD 可能就会发生。但需要记住的是,即使在第二种情况下,BSOD 也不是由任何故意检测错误的机制引起的。你的操作系统和其他程序一样大,所以如果其执行代码或数据被损坏,它可能会尝试执行无效指令、访问不属于它的数据或操作系统可能执行的任何其他非法操作。做检测并因此崩溃。
例外情况是支持错误纠正码。这些是与数据一起存储在 DRAM(或其他存储设备)中的小校验和。它们由内存控制器使用,以确保数据本身的完整性。这种内存更昂贵,通常只在服务器中找到。Windows 有一个相当复杂的系统用于处理 ECC 错误(因为它们不一定是致命的),但如果没有 ECC 内存,就无法检测数据损坏,只要DRAM 数据传输的 JEDEC 规范被服从。
但是,这并不意味着一切都完了。没有实时检查损坏的内存,但是如果你因为内存问题而出现 BSOD,Windows能检测到这一点,它将安排自动运行Windows 内存诊断实用程序,它可以帮助查明内存错误。当您怀疑有损坏的内存损坏数据时,也可以手动运行它。