2010-06-12 10 views
14

Mi aplicación se ejecuta durante unas horas, No hay ningún aumento en ningún valor (vmsize, memoria) del Administrador de tareas. Pero después de unas horas me salen errores de memoria.¿Qué es "Tamaño virtual" en el Explorador de procesos sysinternals

En sysinternals veo que el "Tamaño virtual" aumenta contínuamente, y cuando llega a los 2 GB empiezo a tener errores de memoria.

Entonces, ¿qué clase de pérdida de memoria es esa? ¿Cómo puedo demostrarlo con un código? ¿Es posible reproducir lo mismo con cualquier fragmento de código donde no aumente el valor de la memoria, pero solo aumenta el tamaño virtual en el explorador de proceso sysinternsl?

gracias por todas las sugerencias

+0

Esa pregunta debe tener una etiqueta de Windows. Estuve bastante tentado de responder desde Linux pov;) – Dummy00001

Respuesta

4

Desde el sonido de las cosas, se están quedando sin espacio de direcciones. Windows de 32 bits divide el espacio de direcciones a la mitad, la mitad para el programa de usuario y la mitad para el sistema, por lo que cada uno obtiene 2 gigabytes.

La causa más común de esto es fragmentar el espacio de la memoria hasta el punto de que no puede encontrar un trozo que sea lo suficientemente grande para una asignación. Desafortunadamente, sin saber más acerca de lo que estás haciendo, es difícil adivinar por qué podría estar pasando eso.

8

El tamaño virtual es el número de páginas que el proceso ha asignado, las páginas que actualmente no están en el conjunto de trabajo (cargadas físicamente en la RAM) estarán en el archivo de página del sistema.

Normalmente se asigna memoria que no se libera. Esto puede ser difícil de rastrear en el código sin herramientas especiales como Rational Purify o Boundschecker, por ejemplo. Con sysinternals, verá que debe haber una fuga, pero de ninguna manera le dirá dónde ...

Si su software no es tan grande, puede intentar cerrar la sesión "nuevo" y "eliminar" y ver si hay demasiados objetos en la memoria administrando listas de objetos asignados (creando su propio depurador de memoria, por así decirlo). Hay algunos ayudantes en el mundo de las ventanas como el CRT memory checking utils from Microsoft. Son útiles en algunos casos.

2

Según this thread en el foro sysinternals, tamaño virtual se corresponde con el espacio de direcciones del proceso (supongo páginas comprometidos y reservada de la memoria)

1

Parece que Virtual Tamaño incluye páginas con asignó siguientes tipos: MEM_MAPPED (para las vistas de datos) MEM_IMAGE (por vistas de imágenes ejecutables) MEM_PRIVATE (memoria de páginas asignado habitual)

no es la única "memoria" para los datos, sino que también incluye el espacio de página para * .dll-s y filemapping mecanismo.

Cuestiones relacionadas