【发布时间】:2017-10-12 23:35:35
【问题描述】:
以下 C++ 代码有效:
int *p = new int;
p[1000] = 12;
意思是我访问一个距离 p 大小为 sizeof (int) * 1000 字节的内存位置。
我在想的是,也许 Windows 或任何其他程序当前正在使用内存位置 &p[1000] 做某事。如果我厌倦了将 p[1000] 设置为一个新值,那么可能使用该位置来保存一些内存的另一个程序甚至 Windows 可能会崩溃,因为我更改了该程序的一个重要变量。
由于 C++ 不禁止这样做,我想知道至少 Windows 是否对使用其他人当前使用的内存位置的程序提供某种保护。
【问题讨论】:
-
它不起作用,它表现出未定义的行为。
-
不确定是否是欺骗,因为它不是 Windows 特定的:stackoverflow.com/questions/27539388/…
-
“至少 Windows”是否包括 Windows 3.11 及更早版本?
-
进程内存保护由硬件管理,查找“MMU”
-
这是保护模式操作系统(如 Windows)最基本的工作,以确保您永远不会弄乱另一个进程的地址空间。今天的操作系统以它的方式工作,很大程度上是因为 C 允许这样做。并非总是done this way,但竞争方法无法生存。
标签: c++ windows memory memory-management shared-memory