命名内存映射文件

Naming memory mapped files

本文关键字:文件 映射 内存      更新时间:2023-10-16

根据文档,Local或Global之后的任何字符都可以,除了反斜杠。我决定根据物理文件的文件路径命名我的mmf,如下所示:

    std::string GetMapName(std::string FilePath) {
        std::string Ret("Local\");
        char* pP = (char*)FilePath.c_str();
        for (int i = 0; i < Path.size(); i++) {
            if (pP[i] == '') pP[i] = '/';
        }
        Ret.append(FilePath);
        return Ret;
    }

所以如果文件在C:testvht1。然后它产生字符串"LocalC:/test/vht1.tst"

我在我的计算机上对此没有任何问题,但是这个软件最终将在共享托管环境中结束,并且我真的找不到关于命名MMF的惯例的太多信息。这是个好主意吗?

命名您的MMF映射(内存映射文件)有两个原因:

  • 阅读器之间的接口&MMF
  • 的编写者
  • 帮助调试
  • 的标识符

除非您有一个非常大的项目,否则不太可能有本地名称冲突。你可以给它起任何你喜欢的名字。

包含驱动器号和路径可能不是最好的选择。保持简洁:

std::string GetMapName(std::string filePath)
{
  return "Local\" + Path::GetFileName(filePath);
}

根据docs[1],你不应该使用"Session"前缀。它保留给系统使用。"Global"前缀需要SeCreateGlobalPrivilege。

[1] https://msdn.microsoft.com/en-us/library/aa382954%28v=vs.85%29.aspx