繁体   English   中英

命名内存映射文件

[英]Naming memory mapped files

根据文档,在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:\\ test \\ vht1.tst,则它将生成字符串“ Local \\ C:/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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM