使用C++模拟低内存

Gen*_*too 5 c++ memory debugging

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

dir*_*ird 12

您是否在Windows平台上(查看用户名...可能不是:))如果您在Windows中,AppVerifier具有低内存模拟模式.请参阅低资源模拟测试.


Nic*_*xon 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
Run Code Online (Sandbox Code Playgroud)


Mar*_*ork 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
Run Code Online (Sandbox Code Playgroud)