windows限制中的共享内存(c++)
shared memory in windows limits (c++)
目前我正在为每个进程的内存限制制定解决方案。所以我开始分享记忆。首先,我使用的是带有visualstudio的windows7作为开发平台,该软件将在具有多个CPU和巨大内存的现代windows服务器系统上运行。
嗯,我告诉自己每个进程的内存限制,我需要访问更多的内存。所以我的想法是创建多个进程并使用共享内存。
但是,创建大量共享内存真的很好吗?那么性能呢?
嗯,我告诉自己每个进程的内存限制,我需要访问更多的内存。所以我的想法是创建多个进程并使用共享内存。
每个进程的内存限制适用于虚拟内存。这基本上意味着您的地址空间有一个最大大小(例如,在具有32位指针的系统上为4GB)。由于共享内存是将内存映射到您的地址空间,因此无法解决您的问题。
请记住,如果您将内存块分布到多个进程中,您最终将达到物理内存的极限,然后系统性能将缓慢下降。
如果您确实需要比系统所能提供的内存更多的内存,则需要开始将数据持久化到磁盘。内存映射文件可以让您在地址空间中快速交换内存块。
@Aurus,
听起来,你需要的是一个定制的解决方案来满足特定的(尽管描述不足)需求。虽然Stack Overflow对于寻求专业清晰度和编程示例的开发人员和软件工程师非常有用,但其中提供的任何适用的高级工程都可能不容易找到,也可能无法提供您所寻求的具体答案。人们可能会从你的帖子中做出太多的假设。
无论您从惊人的RAM数量和/或多个处理器上的多个线程中获得什么好处,最好留给那些有构建此类系统经验的人。我自己在这个领域有多年的经验,可以自信地表达我自己缺乏这种特定的经验。老实说,我希望避免这种可能性,因为高成本的硬件通常会导致高压力的日程安排,这也会导致其他问题。不过,我会稍微推测一下——哪怕只是因为它不花你任何钱。。。
如果你的意图是坚定地利用Windows平台,我的一阶猜测是:
- 集群服务器环境(许多用于处理大量线程的多核处理器,由大量可用RAM支持)
- 尖端驱动器硬件——如果你想最大限度地减少频繁虚拟内存访问的影响,你可能需要针对特定的尖端硬件选项,使你能够用更出色的DRAM棒来真正取代主轴驱动器,也就是说固态驱动器——而不是现代iPod和移动PDA中常见的琐碎类型。。。我指的是真正的交易——经典固态驱动器这里有一个很好的例子——查看硬件]。他们的产品比主轴驱动器快两到三个数量级,甚至比消费者固态硬盘快得多(尽管不便宜)
你的目标似乎表明成本不是一个很大的问题,但这是我能给你的最好的,同时缺乏更具体的信息。
最后一点建议是,当向工程师寻求帮助时,最好准确地告诉他们你想要实现什么(目标)。允许他们提供选择,并将现实和现代技术的局限性与您的困境以及财务目标相匹配。通常情况下,即使有深奥而古怪的需求,最好的解决方案实际上是一个定制的"开箱即用"工程解决方案,它的构建/实现成本也远低于暴力方法。换句话说,帮助工程师帮助您,同时注意GIGO原则也适用。
我真诚地希望我提供的东西有用。祝你好运
- 将字符串存储在c++中的稳定内存中
- C++ 指针的内存地址和指向数组的内存地址如何相同?
- Win32编译器选项和内存分配
- 当vector是tje全局变量时,c++中vector的内存管理
- 带内存和隔离功能的SQLite
- 是否可以通过C++扩展强制多个python进程共享同一内存
- 迭代时从向量和内存中删除对象
- 在C++中打印指向不同基元数据类型的指针的内存地址
- 这个指针和内存代码打印是什么?我不知道是打印垃圾还是如何打印我需要的值
- 多个文件的内存分配错误"在抛出 'std :: bad_alloc' what (): std :: bad_alloc 的实例后终止调用" [C++]
- 为什么示例代码访问IUnknown中已删除的内存
- 如何在C++类内存结构中创建"spacer"?
- 从构造函数抛出异常时如何克服内存泄漏
- malloc() 可能出现内存泄漏
- 如何理解将半精度指针转换为无符号长指针和相关的内存对齐
- 在调用FreeLibrary后,释放动态链接到具有相同版本的CRT堆的DLL的内存
- 如何针对特定情况调试和修复此双自由内存损坏问题
- 类型总是使用其大小存储在内存中吗
- 有没有一种方法可以测量c++程序的运行时内存使用情况
- 有没有一种方法可以使用placement new将堆叠对象分配给分配的内存