Windows限制中的共享内存(c ++)

时间:2012-03-12 16:59:56

标签: c++ windows memory shared-memory shared

目前我正在研究每个进程的内存限制解决方案。所以我来共享记忆。首先,我使用Windows 7和visual studio作为开发平台,该软件将运行在具有多个CPU和巨大内存的现代Windows服务器系统上。

好吧,我告诉自己每个进程的内存限制,我需要访问更多的内存。所以我的想法是创建多个进程并使用共享内存。

但创建大量共享内存真的很棒吗?性能怎么样?

2 个答案:

答案 0 :(得分:4)

  

好吧,我告诉自己每个进程的内存限制,我需要访问更多的内存。所以我的想法是创建多个进程并使用共享内存。

每个进程的内存限制是针对虚拟内存。这基本上意味着您的address space具有最大大小(例如,在具有32位指针的系统上为4千兆字节)。由于共享内存是内存映射到您的地址空间,因此无法让您摆脱问题。

请记住,如果将内存块分配到多个进程中,您最终将达到物理内存的限制,然后系统性能将慢慢爬行。

如果您确实需要比系统授予的更多内存,则需要开始将数据保存到磁盘。内存映射文件可以让您快速地将内存块交换进地址空间。

答案 1 :(得分:2)

@ Aurus,

听起来,您需要覆盖目标的是定制设计解决方案,以满足特定(尽管描述不足)的要求。虽然Stack Overflow对于寻求专业清晰度和程序化示例的开发人员和软件工程师非常有用,但是可能不容易找到任何适用的高级工程,并且可能无法提供您寻求的具体答案。你可以从你的帖子中做出太多的假设。

您可能(或可能不)从错开数量的RAM和/或多个处理器上的多个线程获得的任何好处最好留给那些具有构建此类系统的经验的人。我自己在这个领域工作多年,可以自信地表达我自己缺乏特定的经验。老实说,我希望避免这种可能性,因为高价硬件通常会参加高压计划,而这些也可能导致其他问题。我会猜测一点 - 如果只是因为它没有任何成本......

如果您的意图牢牢固定在使用Windows平台上,我的第一顺序猜测是:

  • 集群服务器环境(许多用于处理大量线程的多核处理器,由大量可用RAM支持)
  • 尖端驱动硬件 - 如果您正在寻求最大限度地减少频繁虚拟内存访问的影响,您可能需要针对特定​​的尖端硬件选项,这些选项使您可以用更具说服力的DRAM棒替换主轴驱动器,也就是说固态驱动器 - 不是你在现代iPod和移动PDA中常见的琐碎类型......我指的是 真实交易 - 经典固体状态驱动器[ one fine example is here - 在硬件下查看]。他们的产品比主轴驱动器快两到三个数量级,甚至比消费固态快得多(尽管不便宜)。

你的目标似乎表明成本并不是一个很大的问题,但是在缺乏更多具体信息的情况下,这一点与我能给你的一样好。

最后一点建议是,在寻求工程师的帮助时,最好告诉他们你想要完成的目标(目标)。允许他们提供选项,并将现实和现代技术的局限性与您的困境和财务目标相匹配。通常情况下,即使有深奥和古怪的要求,最好的解决方案实际上是一种定制的“开箱即用”工程解决方案,与蛮力方法相比,最终构建/实施的成本要低得多。换句话说, 帮助工程师帮助您 ,同时注意到GIGO原则同样适用。

我真诚地希望我提供的东西很有用。祝你好运。