如果用零填充整个 RAM 会发生什么

  • 本文关键字:RAM 填充 如果 c++ ram
  • 更新时间 :
  • 英文 :


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

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

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

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

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

最新更新