0

有没有办法访问(读取或释放)分配给程序的内存之外的内存块,而不会出现访问冲突异常。好吧,除此之外,我真正想了解的是内存清理器(系统垃圾收集器)是如何工作的。我一直想写这样一个程序。(语言不是问题)

提前致谢 :)

4

3 回答 3

6

不。

任何现代操作系统都会阻止一个进程访问属于另一个进程的内存。

事实上,如果你了解了虚拟内存,你就会明白这是不可能的。每个进程都有自己的虚拟地址空间。

于 2010-04-11T15:56:00.410 回答
1

简单的答案(少我弄错了),不。一般来说,这不是一个好主意,原因有两个。首先是因为它会导致您的程序和其他程序之间存在信任问题(更不用说我们人类也不会信任您的应用程序)。其次,如果您能够访问另一个应用程序的内存并在应用程序不知道的情况下进行更改,您将导致应用程序崩溃(病毒也会这样做)。

从运行时调用垃圾收集器。运行时“拥有”内存空间并允许其他应用程序“生活”在该内存空间中。这就是垃圾收集器可以存在的原因。您必须创建一个操作系统为其分配内存的运行时,让运行时在其权限下执行应用程序,并在其权限下使用 GC。您将需要允许一些工具或 API 允许应用程序开发人员从您的运行时(而不是操作系统)“请求”内存,并且您的运行时不仅可以响应此类请求,还可以跟踪它的内存空间分配给该应用程序。您可能需要一个框架(一组 DLL'

您必须确保您的垃圾收集器不会删除除正在执行的应用程序使用的内存之外的内存,因为您可能同时在运行时中运行超过 1 个应用程序。

希望这可以帮助。

于 2010-04-11T16:00:41.553 回答
1

实际上正确的答案是肯定的.. 有一些程序可以做到这一点(如果它们存在.. 这意味着它是可能的......)也许你需要编写一个内核驱动器来完成这个,但它是可能的。

哦 - 我还有另一个例子......调试器附加命令......这是一个与另一个程序内存交互的程序,即使两者都作为不同的进程启动......

当然-弄乱另一个程序内存..如果您不知道自己在做什么,可能会使它崩溃...

于 2010-04-11T16:10:47.643 回答