Pregunta

Estoy escribiendo una aplicación C ++ basadas en Qt y tengo que ser capaz de detectar la fragmentación de memoria con el fin de comprobar si el sistema actual realmente puede sostener la carga de la memoria: el programa se carga una imagen grande (15/21 megapíxeles son la norma) en la memoria y luego realizar algún tipo de filtrado en ella (W / matrices dispersas). Por ejemplo, estoy teniendo problema de la fragmentación de memoria en Windows y VMMap ha sido muy útil en esto: el problema era algunos archivos DLL (tableta Wacom "wintab32.dll" y la aplicación UltraMon) no consigue reubicados por lo que se están dividiendo el espacio de direcciones en el 0x10000000-0x30000000 VA del proceso.

Quiero ofrecer la aplicación con algún tipo de sensibilización hacia el problema de la fragmentación y preguntándose si una multiplataforma (Linux / Mac / Win32) dando enfoque da la información que ya existe VMMap.

¿Fue útil?

Solución

Respuesta corta: No hay manera portátil.

Respuesta larga: ¿Cómo se implementa la pila y la forma en que funciona es un detalle de implementación de la aplicación que difiere ampliamente entre las plataformas, bibliotecas std, y sistemas operativos. Vas a tener que crear una versión diferente para cada aplicación - proporcionada, la aplicación le proporciona una API para enganchar en ella. (¿Qué Creo debería ser el caso de las tres plataformas que objetivo.)

Otros consejos

Creo que es demasiado pesimista. 21 megapíxeles, incluso suponiendo una profundidad de color de 16 bits y un alphachannel de igual tamaño tomarían sólo 168 MB. El espacio de direcciones disponibles en un sistema de 32 bits se mide en gigabytes.

¿Sería esto lo que usted necesita?

bool is_contiguous_freestore_available(size_t max)
{
   char* tst = new(std::nothrow) char[max];
   if (tst == null)
      return false;

   delete[] tst;
   return true;
}
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top