使用C ++模拟低内存

时间:2009-12-17 18:28:47

标签: c++ debugging memory

我正在调试一个在低内存情况下失败的程序,并希望C ++程序只消耗大量内存。任何指针都会有所帮助!

6 个答案:

答案 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来限制应用可用的虚拟内存量。