【问题标题】:Windows Mobile memory corruptionWindows Mobile 内存损坏
【发布时间】:2009-02-11 23:27:42
【问题描述】:

WM 操作系统是否相互保护进程内存? 一个写得不好的应用程序是否会因为错误地写入第一个内存而导致其他应用程序崩溃?

【问题讨论】:

    标签: memory windows-mobile corruption


    【解决方案1】:

    至少在所有当前版本中,Windows Mobile 是基于 Windows CE 5.0 构建的,因此使用CE 5.0's memory model(与 CE 3.0 中的相同)。操作系统实际上并没有为保护进程内存做很多事情,但它通常足以防止进程相互干扰。不过这并不难。

    CE 进程在“槽”中运行,其中有 32 个。当前运行的进程被交换到槽 0,并且它的地址被重新设置为零(因此正在运行的进程中的所有内存实际上都有 2 个地址,槽0 地址,它是非零插槽地址)。这些地址受到保护(尽管有一个simple API call 可以跨越边界)。这意味着指针损坏等不会踩到其他应用程序,但如果您想要,您仍然可以。

    CE 也有共享内存的概念。所有进程都可以访问该区域,并且 100% 不受保护。如果您的应用程序正在使用共享内存(并且内存管理器可以在您没有特别要求的情况下为您提供共享地址,具体取决于您的分配及其大小)。如果您有共享内存,那么可以,任何进程都可以访问该数据,包括破坏数据,并且您不会在任何一个进程中收到错误或警告。

    【讨论】:

      【解决方案2】:

      WM 操作系统是否相互保护进程内存?

      是的。

      一个写得不好的应用程序是否会因为错误地写入第一个内存而导致其他应用程序崩溃?

      否(但它可能会做其他事情,例如用完所有“磁盘”空间)。

      即使您是设备驱动程序,要获得写入由不同进程拥有的内存的权限,您也必须显式调用一个 API。

      【讨论】:

        【解决方案3】:

        虽然 ChrisW 的回答在技术上是正确的,但我对 Windows 移动设备的体验是,从应用程序崩溃整个设备比在桌面上崩溃要容易得多。我可以猜到出现这种情况的几个原因;

        • 操作系统通常比 Windows 桌面更多地进行 OEM,即制造商特定的低级代码数量可能非常多,这会导致制造商特定的错误,从而导致严重的崩溃。在许多设备上,每个月左右都会看到一个新的固件版本,这些版本是对此类错误的修复。

        • 资源越来越稀缺,耗尽所有可用资源的应用程序很容易导致崩溃。

        • 保护机制和架构差异很大。我目前使用的设备是基于 SH4 的,而你主要看到的是 ARM、X86 和奇怪的 MIP CPU。

        【讨论】:

          猜你喜欢
          • 2014-09-23
          • 1970-01-01
          • 2015-06-11
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2021-06-15
          相关资源
          最近更新 更多