Estoy depurando un programa que falla durante una situación de memoria baja y me gustaría un programa C++ que simplemente consume MUCHA memoria. ¡Cualquier apuntador ayudaría!Simulando poca memoria usando C++
Respuesta
Allcoating big blocks no va a funcionar.
- Dependiendo del sistema operativo, no está limitado a la memoria física real y los fragmentos grandes no utilizados podrían intercambiarse al disco.
- También esto hace que sea muy difícil hacer que su memoria falle exactamente cuando quiere que falle.
Lo que necesita hacer es escribir su propia versión del comando new/delete that fail on.
algo como esto:
#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
Es posible que el simple enlace de una versión de reemplazo de malloc() que devuelve nulo a petición proporcione una mejor cobertura (o tal vez ambos en caso de que el nuevo incorporado no use malloc()) de modo que si algún código utiliza malloc () fallará al mismo tiempo y, si se usa nuevo (nothrow), seguirá fallando. – Clifford
No es un requisito de new/delete usar malloc/free. Por lo tanto, deberá verificar su documentación de implementación para ver cómo funciona bajo el capó. Consulte http://stackoverflow.com/questions/240212/what-is-the-difference-between-new-delete-and-malloc-free/240308#240308 para obtener más información –
Vinculación en una nueva versión con la versión especial de malloc/free puede ser problomático pero no es imponible. Pero, técnicamente, el estándar no admite ese tipo de comportamiento (aunque las herramientas comerciales hacen exactamente eso (pero tienen equipos de desarrollo trabajando en el problema)). –
sé que es una fuga, pero punteros le ayudará :)
int main()
{
for(;;)
{
char *p = new char[1024*1024];
}
// optimistic return :)
return 0;
}
La asignación de trozos grandes eventualmente fallará. Pero no ayuda a hacerlo fallar de una manera controlada. Además, el sistema operativo cambiará las páginas al disco, ya que no está limitado por los límites físicos de RAM. –
¿Estás en la plataforma Windows (mirando el nombre de usuario ... quizá no :)) Si se encuentra en la tierra de Windows , AppVerifier tiene un modo de simulación de memoria baja. Vea la prueba de simulación de bajo recurso.
+1 No he usado AppVerifier en sí, pero algo así es una idea mucho mejor. No desea que todo en su sistema sufra (¡como su depurador!) En su situación de miembro bajo. – luke
Sólo tiene que escribir una aplicación C++ que crea una matriz gigante
Es posible que necesite deshabilitar el administrador de memoria virtual (limite el sistema operativo a solo usar la memoria física). Incluso podría ir tan lejos como para eliminar algo de RAM de su sistema, para acelerar el punto en el que tiene poca memoria RAM. – Mordachai
El problema aquí se vuelve difícil escribir pruebas que fallan consistentemente en cualquier entorno. –
Si está utilizando Unix o Linux, me gustaría sugerir el uso de ulimit: se le pidió
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
Una pregunta similar aquí y fue htis mi respuesta. How do I force a program to appear to run out of memory?
En Linux, el comando ulimit
es probablemente lo que desea.
Es probable que desee utilizar ulimit -v
para limitar la cantidad de memoria virtual disponible para su aplicación.
- 1. qué significa "poca memoria" en linux
- 2. cómo asignar correctamente la memoria en C++ en condiciones de poca memoria
- 3. C# Volviendo Lista - Poca Accesibilidad
- 4. simulando el toque usando ADB
- 5. ¿Cómo limito RAM para probar situaciones de poca memoria?
- 6. ¿Cómo se simula poca memoria en el emulador de Android?
- 7. Simulación de batería baja y poca memoria en Android
- 8. Haskell analizar el archivo xml grande con poca memoria
- 9. Advertencias y bloqueos de la memoria del iPhone - pero los instrumentos que muestran poca memoria usan
- 10. Simulando un BlueScreen
- 11. Simulando lluvia
- 12. Posible pérdida de memoria usando C++ cadena
- 13. Toma de volcado de memoria usando C#
- 14. Simulando un If-Else de 2 niveles usando RewriteCond
- 15. C#: simular pérdidas de memoria
- 16. Simulando un dispositivo TWAIN
- 17. Simulando una pestaña presionando una tecla usando JavaScript
- 18. Simulando el mecanismo de filtro Maven2 usando Ant
- 19. Muy poca utilización de CPU en Java
- 20. imprimiendo lentamente (Simulando tipear)
- 21. Simulando reciclaje de AppDomain
- 22. Simulando cambios de ubicación para `startMonitoringSignificantLocationChanges`
- 23. ¿Alguien sabe de una implementación de java.util.Map optimizada para el uso de poca memoria?
- 24. ¿Cómo encontrar palabras de alta frecuencia en un libro en un entorno con poca memoria?
- 25. ¿Qué es la memoria de tacos y por qué tengo poca?
- 26. ¿Persiste una alarma AlarmManager si el sistema mata la aplicación debido a la poca memoria?
- 27. Android Simulator: ¿Manera fácil de simular un reinicio del proceso debido a poca memoria?
- 28. ¿Se puede calcular el algoritmo SHA-1 en una secuencia? Con poca huella de memoria?
- 29. Simulando un miembro estático virtual de una clase en C++?
- 30. Simulando objetos sin constructor sin argumentos en C#/.NET
"Cualquier indicador ayudarían!" - Eso es gracioso teniendo en cuenta la pregunta – KeatsPeeks
Sugiero Photoshop ... heh. – Aaron
0x3A28213A 0x6339392C 0x7363682E –