boost shared_memory_object 将内容存储在磁盘中?
Posted
技术标签:
【中文标题】boost shared_memory_object 将内容存储在磁盘中?【英文标题】:boost shared_memory_object stores content in disk? 【发布时间】:2013-06-20 05:26:18 【问题描述】:我正在基于单个数据库训练多个网络。
所以为了加快速度和减少磁盘读取,我使用了boost提供的shared_memory_object
类。由于实验室工作站目前不可用,我将代码迁移到我的个人计算机上。
在实验室工作站上,主机程序成功将所有数据读入内存。但在我的电脑上,奇怪的是它会在系统驱动器上创建一个文件,而不是将数据存储在内存中。整个数据库大约3.7 GB;实验室工作站具有 32 GB 内存并运行 Windows Server 2008 R2;我的电脑有 8 GB 内存并运行 Windows 7。
应该有足够的内存来存储数据。所以为什么?是否有某些方法可以强制程序将所有数据保存在内存中?
【问题讨论】:
【参考方案1】:这是使用内存映射文件作为共享内存的支持,因此任何一台机器的磁盘上都需要一个物理文件。操作系统仍然对该文件的内容进行大量缓存,因此如果有可用空间,它实际上仍然可以将其完全缓存在 RAM 中。
如果您不喜欢查看实际存在于磁盘上的文件名,那么您可以尝试 windows_shared_memory 代替。它将使用从系统交换文件中获取的空间作为共享内存的支持。
【讨论】:
但是为什么它在 Win 7 和 Server 08 之间的行为不同呢?在 Server 08 上,没有这样的物理文件。 我实际上并没有在Win32上使用shared_memory_object
,所以我无法确认行为上的差异......但是,如果您没有在提供给 shared_memory_object 的文件名中指定绝对路径,则可能在 Server 08 上创建了一个文件,但它只是位于意外目录中。您还可以使用 SysInternals 的 Process Explorer 来查看它是否真的在某个地方有一个意外的打开文件句柄。以上是关于boost shared_memory_object 将内容存储在磁盘中?的主要内容,如果未能解决你的问题,请参考以下文章
Boost.Thread 链接 - boost_thread 与 boost_thread-mt