【问题标题】:Should pointers to memory mapped files be consistent across processes?指向内存映射文件的指针是否应该跨进程保持一致?
【发布时间】:2019-11-17 14:29:01
【问题描述】:

我正在做一些需要进程间通信的工作。我在一个进程中使用 CreateFileMapping(使用 Windows API)创建了一个内存映射文件。在另一个过程中,我使用 OpenFileMapping 和 MapViewOfFile 来访问(假定)相同的数据。我发现这些数据的地址在每个进程中都不一样,这是意料之中还是我做错了什么?

【问题讨论】:

    标签: winapi shared-memory memory-mapped-files


    【解决方案1】:

    这是完全预期的正常行为。

    不同的进程有不同的地址空间。一个进程中的指针在另一个进程中无效。重要的是每个进程都获得自己的指向共享映射对象的本地有效指针。当每个进程想要访问共享映射对象内部的数据时,需要使用与每个进程相关的指针和地址来完成访问。

    这在微软自己的文档中有更详细的介绍:File Mapping

    【讨论】:

    • "一个进程中的指针在另一个进程中无效"啊!我不知道。看起来我对指针的理解从根本上是有缺陷的。感谢您的回答。
    • 一个例外是HWND,它是一个有效的进程间指针,
    • @MichaelChourdakis HWND 不是指向内存地址的指针,它是全局内核表的句柄。 API 使用指针来保存句柄值,但它不是真正的指针,您可以取消引用以访问数据
    猜你喜欢
    • 1970-01-01
    • 2018-01-26
    • 2014-08-13
    • 1970-01-01
    • 2011-01-26
    • 2014-01-26
    • 1970-01-01
    • 2019-12-28
    • 2022-10-01
    相关资源
    最近更新 更多