C++ 减少Visual Studio';内存限制

C++ 减少Visual Studio';内存限制,c++,visual-studio-2010,C++,Visual Studio 2010,我有一个项目,我想触发一些内存异常,看看它们发生在哪里,而不必加载2GB文件。我该怎么做呢?我想你是在谈论32位Windows的2GB限制。如果您这样做-这可能会达到以下效果: 只需预先分配一些内存,以生成一些基本负载,例如 struct memwaste { char* m_ptr; memwaste() : m_ptr(new char[1024*1024*104]) {} //waste 1 gb ~memwaste() { delete[] m_ptr } }x; 将这个结

我有一个项目,我想触发一些内存异常,看看它们发生在哪里,而不必加载2GB文件。我该怎么做呢?

我想你是在谈论32位Windows的2GB限制。如果您这样做-这可能会达到以下效果:

只需预先分配一些内存,以生成一些基本负载,例如

struct memwaste
{
  char* m_ptr;
  memwaste() : m_ptr(new char[1024*1024*104]) {} //waste 1 gb
  ~memwaste() { delete[] m_ptr }
}x;
将这个结构添加到代码的某个地方,它会“浪费”一些内存(也称为基本负载)。现在你可以运行你的程序了。最终它将遇到分配内存的问题


当然,memwast的基本负载必须根据您的需要进行调整-这取决于您要检查内存分配错误的位置。

只需运行一个快速循环,分配内存块,直到耗尽为止

void* p;
do {
  p = malloc (1024 * 1024);
} while (p != NULL);

这个问题没有真正意义。“Visual Studio的内存限制”是什么意思?我想这是指运行程序的32位用户空间内存限制,以及IDE和出现错误的应用程序之间的混淆。你是指“内存不足异常”吗?如果不是,你是指什么“内存异常”?@Daupic:我是指程序可以使用的内存。@Dan:是的,我指的是OOM例外。你应该填满内存,以确保操作系统在你身后没有做任何“聪明”的事情,比如“不是真正分配内存,而是只分配地址空间”。请阅读Linux上的“Overmit”。你不能肯定微软明天不会这么做。有趣的策略——但我认为这不是一个好策略。不过修复起来还是很容易的,只需在构造函数内部调用memset即可。2GB的限制与过度使用无关,只与地址空间有关。您仍在使用地址空间,如果内存页没有真正的内存支持,将达到限制。