Моделирование низкой памяти с помощью C++

Я отлаживаю программу, которая перестала работать во время низкой ситуации с памятью и хотела бы программу C++, которая просто использует ПАРТИЮ памяти. Любые указатели помогли бы!

5
задан rjzii 17 December 2009 в 18:31
поделиться

6 ответов

Allcoating больших блоков не будет работать.

  • В зависимости от ОС вы не ограничены реальной физической памятью, и неиспользуемые большие куски потенциально могут быть просто выгружены на диск.
  • Также это очень сложно заставить вашу память выйти из строя именно тогда, когда вы хотите, чтобы она вышла из строя.

Что вам нужно сделать, так это написать свою собственную версию new / delete, которая завершается ошибкой по команде.

Что-то вроде этого:

#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
7
ответ дан 18 December 2019 в 05:33
поделиться

Are you on the Windows platform (looking at the username...perhaps not :) ) If you are in Windows land, AppVerifier has a low memory simulation mode. See the Low Resource Simulation test.

12
ответ дан 18 December 2019 в 05:33
поделиться

Если вы используете 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
9
ответ дан 18 December 2019 в 05:33
поделиться

Just write a c++ app that creates a giant array

3
ответ дан 18 December 2019 в 05:33
поделиться

Я знаю, что это утечка, но указатели будут help :)

int main()
{
    for(;;)
    {
        char *p = new char[1024*1024];
    }
    // optimistic return :)
    return 0;
}
2
ответ дан 18 December 2019 в 05:33
поделиться

Здесь был задан аналогичный вопрос, и это был мой ответ. Как заставить программу работать с нехваткой памяти?

В Linux, вероятно, вам нужна команда ulimit .

Возможно, вы захотите использовать ulimit -v , чтобы ограничить объем виртуальной памяти, доступной вашему приложению.

0
ответ дан 18 December 2019 в 05:33
поделиться
Другие вопросы по тегам:

Похожие вопросы: