如果将零填满整个RAM,会发生什么情况

时间:2019-06-03 20:23:36

标签: c++ ram

如果运行代码段,PC会发生什么?

...
for (char* ptr = 0; &*ptr < RAM_SIZE; ++ptr)
{
    *ptr = 0;
}
...

1 个答案:

答案 0 :(得分:3)

实际上,在具有现代操作系统的现代PC上,尝试写入内存地址0将导致分段错误,并且操作系统将终止程序。

在某些嵌入式硬件或具有无内存保护的操作系统的PC(例如MS-DOS)上,计算机很可能会挂起,因为您将覆盖对操作系统重要的内存区域,并且CPU最终会死机执行“随机”机器代码,在大多数情况下,这会导致CPU以某种方式“卡住”。要恢复,您可能需要硬重置或关闭电源。如果运气不佳,可能还会损坏例如磁盘内容。

在语言级别,将0分配给指针与将空指针分配给它相同。取消引用空指针(*ptr = 0;)是未定义的行为,因此从理论上讲,编译器可以生成该源代码可以想象的任何机器代码(因为它可以证明您在那里有未定义的行为)。因此,从理论上讲,运行该命令可能会发生任何事情。