【问题标题】:boost shared_memory_object stores content in disk?boost shared_memory_object 将内容存储在磁盘中?
【发布时间】:2013-06-20 05:26:18
【问题描述】:

我正在基于单个数据库训练多个网络。

所以为了加快速度和减少磁盘读取,我使用了boost提供的shared_memory_object类。由于实验室工作站目前不可用,我将代码迁移到我的个人计算机上。

在实验室工作站上,主机程序成功将所有数据读入内存。但在我的电脑上,奇怪的是它会在系统驱动器上创建一个文件,而不是将数据存储在内存中。整个数据库大约3.7 GB;实验室工作站具有 32 GB 内存并运行 Windows Server 2008 R2;我的电脑有 8 GB 内存并运行 Windows 7。

应该有足够的内存来存储数据。所以为什么?是否有某些方法可以强制程序将所有数据保存在内存中?

【问题讨论】:

    标签: boost interprocess boost-interprocess


    【解决方案1】:

    这是使用内存映射文件作为共享内存的支持,因此任何一台机器的磁盘上都需要一个物理文件。操作系统仍然对该文件的内容进行大量缓存,因此如果有可用空间,它实际上仍然可以将其完全缓存在 RAM 中。

    如果您不喜欢查看实际存在于磁盘上的文件名,那么您可以尝试 windows_shared_memory 代替。它将使用从系统交换文件中获取的空间作为共享内存的支持。

    【讨论】:

    • 但是为什么它在 Win 7 和 Server 08 之间的行为不同呢?在 Server 08 上,没有这样的物理文件。
    • 我实际上并没有在Win32上使用shared_memory_object,所以我无法确认行为上的差异......但是,如果您没有在提供给 shared_memory_object 的文件名中指定绝对路径,则可能在 Server 08 上创建了一个文件,但它只是位于意外目录中。您还可以使用 SysInternals 的 Process Explorer 来查看它是否真的在某个地方有一个意外的打开文件句柄。
    猜你喜欢
    • 2012-05-13
    • 1970-01-01
    • 2010-12-29
    • 2014-06-10
    • 1970-01-01
    • 2012-05-13
    • 2011-10-04
    • 2012-11-01
    • 2012-08-02
    相关资源
    最近更新 更多