如何为 Windows 中的进程分配超过 2GB 的内存?
Posted
技术标签:
【中文标题】如何为 Windows 中的进程分配超过 2GB 的内存?【英文标题】:How can I allocate more than 2GB of memory to a process in Windows? 【发布时间】:2011-10-12 18:33:18 【问题描述】:我正在运行一个构建一个非常大的对象的程序,如果为这个进程分配超过 2GB 的内存,我会受益匪浅。提前致谢。
【问题讨论】:
即使它可能使您的程序更易于编写,但分配 2GB 以上的内存块肯定会导致您的用户的应用程序更差。 如何构建一个 2GB 的对象? @gabe 数组是最明显的例子 @David:不过,如果是这样的话,我会假设 OP 会说“一个非常大的数组”。 【参考方案1】:您不能分配大于 2GB 的单个对象(或数组),这是 CLR 限制。您必须将对象分成几块。
【讨论】:
所以假设我有一个 3GB 的对象,我将其拆分为 6 个 0.5GB 的对象,这不会超过 2GB 的进程限制吗?再次感谢。 而且,TBH,如果您尝试管理这么大的对象,您需要重新考虑。 @Schroedingers Cat 为某些算法分配巨大的对象是完全合理的。 @Isaac Newton - 当然它会超过 3.0GB 的限制。除非您使用 /3gb 开关,否则您不能在 32 位操作系统上加载超过 2GB 的虚拟内存。除非你对系统有完全的控制权,否则你的设计就是有缺陷的,如果你将这么多的信息加载到你的应用程序中。 @David 好吧,我的意思是 有 合法的情况下,这可能是合理的 - 如果您的软件成本 > 10K 美元并且带有自己的预配置机器(高度考虑专业的工业应用程序),这可能是合理的,因此至少值得了解。但我们大多数人几乎肯定不是这样【参考方案2】:.NET Framework 4.5 允许在 64 位平台上创建大于 2GB 的数组。此功能默认不启用,必须通过配置文件使用 gcAllowVeryLargeObjects 元素启用。
http://msdn.microsoft.com/en-us/library/hh285054(v=vs.110).aspx
【讨论】:
这是唯一的方法吗?如果没有必要,我真的不想切换到 VS2012。【参考方案3】:您似乎指的是 32 位 Windows 中虚拟内存的 2gb 限制。在 32 位系统上您无法绕过此限制。
【讨论】:
您可以在 boot.ini 配置中使用 /3gb 开关并将进程标记为“大地址空间感知”...但是尝试在 32 位操作系统上加载 2GB 内存对于本机或托管代码。 @alexei 机器管理员可以做 /3gb 但应用不能以上是关于如何为 Windows 中的进程分配超过 2GB 的内存?的主要内容,如果未能解决你的问题,请参考以下文章