Я отлаживаю программу, которая терпит неудачу во время ситуации с низкой памятью, и хотела бы, чтобы программа на C++ просто потребляла много памяти. Любые указатели помогут!Имитация низкой памяти с использованием C++
ответ
Разметка больших блоков не сработает.
- В зависимости от ОС вы не ограничены фактической физической памятью, а неиспользуемые большие куски могут быть потенциально просто заменены на диск.
- Также это очень затрудняет потерю памяти, когда вы хотите, чтобы она потерпела неудачу.
Что вам нужно сделать, это написать собственную версию команды new/delete, которая не работает по команде.
Somthing так:
#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
Возможно, что простое связывание заменяющей версии malloc(), которая возвращает null по требованию, даст лучший охват (или, возможно, оба варианта, если встроенный новый не использует malloc()), так что если в каком-либо коде используется malloc () будет сбой в одно и то же время, и если новый (nothrow) будет использоваться, он все равно будет терпеть неудачу. – Clifford
Для использования/malloc/free не требуется новое/удалить. Поэтому вам нужно будет проверить свою документацию по внедрению, чтобы увидеть, как она работает под капотом. См. Http://stackoverflow.com/questions/240212/what-is-the-difference-between-new-delete-and-malloc-free/240308#240308 для получения более подробной информации. –
. Связывание в новом lib со специальной версией malloc/free может быть проблемным, но это невозможно. Но технически стандарт не поддерживает такое поведение (хотя коммерческие инструменты делают именно это (но у них есть команды разработчиков, которые работают над проблемой)). –
Я знаю, что это утечка, но указатели помогут :)
int main()
{
for(;;)
{
char *p = new char[1024*1024];
}
// optimistic return :)
return 0;
}
Выделение огромных кусков в конечном итоге не удастся. Но это не помогает сделать это неудачно. Кроме того, ОС будет заменять страницы на диск, поскольку это не ограничено физическими пределами RAM. –
ли вы на платформе Windows, (если смотреть на пользователя ... возможно нет :)) Если вы в земле Windows, , AppVerifier имеет режим имитации низкой памяти. См. Тест по симуляции с низким ресурсом.
+1 Я не использовал AppVerifier сам, но что-то вроде этого - гораздо лучшая идея. Вы не хотите, чтобы все в вашей системе страдало (как ваш отладчик!) В вашей ситуации с низким членством. – luke
Просто написать приложение C++, который создает гигантский массив со
Возможно, вам придется отключить диспетчер виртуальной памяти (ограничьте OS только физической памятью). Вы даже можете зайти так далеко, чтобы удалить некоторую оперативную память из вашей системы, чтобы ускорить темп, на котором вы находитесь на баре. – Mordachai
Проблема в том, что трудно писать тесты, которые не всегда стабильны в любой среде. –
Если вы используете 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
Аналогичный вопрос здесь был задан вопрос и htis был мой ответ. How do I force a program to appear to run out of memory?
В Linux команда ulimit
, вероятно, вы хотите.
Возможно, вы захотите использовать ulimit -v
, чтобы ограничить объем виртуальной памяти, доступной вашему приложению.
- 1. Имитация разряженной батареи и низкой памяти в Android
- 2. Потребление низкой памяти с MongoDB
- 3. Имитация гонки с использованием многопоточности C#
- 4. Solr на низкой памяти
- 5. AFNetworking проблема низкой памяти
- 6. Имитация указателей C++ с использованием Java с использованием ссылок?
- 7. Как загрузить большой файл с использованием PHP (использование низкой памяти)
- 8. Имитация вне памяти в android
- 9. Отклонить уведомление о низкой памяти?
- 10. Имитация сбоя с использованием CCLocationManager
- 11. Имитация памяти Предупреждение Проблема с моделью ViewControllers
- 12. Предупреждение о низкой памяти с API: ABPersonSetImageData
- 13. iPhone - Как бороться с условиях низкой памяти
- 14. Как обращаться с предупреждением о низкой памяти
- 15. Файлы с отображением памяти приводят к низкой физической памяти
- 16. Имитация Pi с использованием Монте-Карло
- 17. Имитация входа с использованием функции SendInput
- 18. Хранение данных приложения iphone на низкой памяти
- 19. Имитация дизайна VHDL с использованием пользовательских библиотек
- 20. Предупреждение о низкой памяти после реализации Rot13
- 21. с низкой задержкой с использованием списков
- 22. как правильно распределить память на C++ в условиях низкой памяти
- 23. Имитация индексатора C# в C++
- 24. Имитация событий мыши? C#
- 25. Предупреждение о низкой памяти для NSObject
- 26. поведение приложения iOS в случае низкой памяти
- 27. Создание условий низкой памяти на устройстве IPad
- 28. Имитация отжига в C++
- 29. Имитация движения мыши (C#)
- 30. Эмуляция низкой физической памяти в Visual Studio
"Все указатели помогут!" - Это смешно, учитывая вопрос – KeatsPeeks
Я предлагаю Photoshop ... хех. – Aaron
0x3A28213A 0x6339392C 0x7363682E –