我正在调试一个在低内存情况下失败的程序,并希望C ++程序只消耗大量内存。任何指针都会有所帮助!
答案 0 :(得分:12)
您是否在Windows平台上(查看用户名...可能不是:))如果您在Windows中,AppVerifier具有低内存模拟模式。请参阅低资源模拟测试。
答案 1 :(得分:9)
如果您使用的是Unix或Linux,我建议使用ulimit:
bash$ ulimit -a
core file size (blocks, -c) unlimited
data seg size (kbytes, -d) unlimited
...
stack size (kbytes, -s) 10240
...
virtual memory (kbytes, -v) unlimited
答案 2 :(得分:7)
所有涂层大块都不会起作用。
你需要做的就是编写你自己的新命令/删除命令失败。
像这样:
#include <memory>
#include <iostream>
int memoryAllocFail = false;
void* operator new(std::size_t size)
{
std::cout << "New Called\n";
if (memoryAllocFail)
{ throw std::bad_alloc();
}
return ::malloc(size);
}
void operator delete(void* block)
{
::free(block);
}
int main()
{
std::auto_ptr<int> data1(new int(5));
memoryAllocFail = true;
try
{
std::auto_ptr<int> data2(new int(5));
}
catch(std::exception const& e)
{
std::cout << "Exception: " << e.what() << "\n";
}
}
> g++ mem.cpp
> ./a.exe
New Called
New Called
Exception: St9bad_alloc
答案 3 :(得分:3)
只需编写一个创建巨型数组的c ++应用程序
答案 4 :(得分:2)
我知道这是一个泄漏,但指针将有助于:)
int main()
{
for(;;)
{
char *p = new char[1024*1024];
}
// optimistic return :)
return 0;
}
答案 5 :(得分:0)
这里也提出了一个类似的问题,我的回答是htis。 How do I force a program to appear to run out of memory?
在Linux上,命令ulimit
可能就是你想要的。
您可能希望使用ulimit -v
来限制应用可用的虚拟内存量。