我有一台 2019 款 MacBook Pro i9,内存为 64GB。昨晚,由于内存损坏,我出现了内核恐慌(仅一次)。所以,今天,我用 C++ 编写了一个小程序来分配和探测大量内存,用交替的 0 和 0xff 设置内存位置,然后检查内存是否保持不变。这是:
#include<stdlib.h>
#include<stdio.h>
int main(int argc,char **argv)
{
printf("Allocating...\n");
unsigned char* mem = (unsigned char*)malloc(52949672960);
if(!mem) { printf("alloc error!\n"); return 1; }
printf("Filling memory...\n");
for(long i=0;i<52949672960;i+=2) { mem[i]=255; mem[i+1]=0; }
printf("Testing memory...\n");
for(long i=0;i<52949672960;i+=2) {
if(mem[i]!=255) printf("ERROR!! Loc %lu was %d instead of %d\n",i,mem[i],255);
if(mem[i+1]!=0) printf("ERROR!! Loc %lu was %d instead of %d\n",i+1,mem[i+1],0);
}
free(mem);
printf("Complete!\n");
return 0;
}
令我恐惧的是,我在 1 个内存位置上不断收到错误,例如:
stormlord@MacBook-Pro mem % ./test
Allocating...
Filling memory...
Testing memory...
ERROR!! Loc 917863483 was 1 instead of 0
Complete!
我注意到一个主题,地址(在本例中为 917863483)是十六进制的 0x36B57C3B,以 C3B 结尾,情况总是如此 - 地址总是以 C3B 结尾,并且总是从 0 到 1。所以我我认为它是相同的物理内存位置,但它显示在我的数组中的不同位置,因为显然,物理内存不会每次都排列相同。 (旁注:我意识到我的测试可能应该遍历相同的内存并在第二遍中写入/验证相反的字节)。
我在网上读到,按住 OPT + CMD + R + P 的同时重新启动计算机将破坏 PRAM,它可以帮助解决一般硬件问题。自从我这样做以来,我的测试一直通过,但我仍然不舒服。这听起来像是硬件损坏吗?还是我没问题?
好吧,如果这种情况发生在任何人身上,并且您使用的 MacBook 不是老式的,请准备好购买带有处理器、内存、SSD 和图形芯片的新主板。这是糟糕的记忆,这就是我需要做的来修复它。所有新的内脏。