【发布时间】:2019-06-03 20:23:36
【问题描述】:
如果运行代码 sn-p,PC 会发生什么?
...
for (char* ptr = 0; &*ptr < RAM_SIZE; ++ptr)
{
*ptr = 0;
}
...
【问题讨论】:
-
你试过了吗?
-
抛开语言规则,您应该知道消费者操作系统通过虚拟内存将指针值与实际 RAM 地址分开。
-
大多数环境不允许您这样做(您的应用将在第一次写入尝试时崩溃/终止)。
-
在任何现代操作系统上,这段代码都会崩溃而不会破坏任何东西。由于virtual memory,您将无法写入不属于您的进程的内存。
-
在嵌入式系统中,您可能最终会写入控制硬件设备的寄存器,并且它可能会变得丑陋(也就是未定义的行为)。您可以写入没有分配任何内存(读或读/写)的位置,从而导致数据访问中止。