【问题标题】:How can I allocate more than 2GB of memory to a process in Windows?如何为 Windows 中的进程分配超过 2GB 的内存?
【发布时间】:2011-10-12 18:33:18
【问题描述】:

我正在运行一个构建一个非常大的对象的程序,如果为这个进程分配超过 2GB 的内存,我会受益匪浅。提前致谢。

【问题讨论】:

  • 即使它可能使您的程序更易于编写,但分配 2GB 以上的内存块肯定会导致您的用户的应用程序更差。
  • 如何构建一个 2GB 的对象?
  • @gabe 数组是最明显的例子
  • @David:不过,如果是这样的话,我会假设 OP 会说“一个非常大的数组”。

标签: c# windows memory process


【解决方案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 但应用不能
猜你喜欢
  • 1970-01-01
  • 2013-04-10
  • 2013-03-25
  • 1970-01-01
  • 2013-01-14
  • 2013-06-11
  • 1970-01-01
  • 1970-01-01
  • 2010-11-09
相关资源
最近更新 更多