Pregunta

Tener algunos problemas fuera de la memoria con un proceso de 32 bits en Windows Me comenzado a utilizar el Monitor de rendimiento para registrar ciertos contadores para ese proceso.

A pesar de que es normal que los bytes virtuales es más alta que las dos bytes privados y del conjunto de trabajo, encontré que en mi caso no había una diferencia sustancial, Bytes virtuales fue más más alta que ambos bytes privados y de Trabajo Set.

¿Qué operaciones y funciones específicas de Win32 / CRT (en C o C ++) aumentarían Bytes virtuales pero no privado Bytes y espacio de trabajo?

supongo que sería algún tipo de recursos compartidos, si comprendo la descripción de los diferentes contadores en Monitor de rendimiento.


Como parece que hay algunos (por decir lo menos) la confusión en la convención de nombres para el uso de los contadores de memoria en las diferentes versiones de Windows, así como en diferentes aplicaciones en la misma versión de Windows, que armó la siguiente:

Información de MSDN

De acuerdo con MSDN - Límites de memoria para lanza Windows , la dirección virtual límite de espacio de modo de usuario en Windows de 32 bits para cada proceso de 32 bits es normalmente de 2 GB. Puede ser de hasta 3 GB con IMAGE_FILE_LARGE_ADDRESS_AWARE y 4GT.

A continuación se muestra una descripción de los diferentes contadores en Monitor de rendimiento, junto con las columnas correspondientes en el Administrador de tareas y la estructura de Win32 que contiene la información, de acuerdo con la MSDN -. memoria Información de rendimiento

Virtual Bytes

  

Bytes virtual es el tamaño actual, en bytes, del espacio de direcciones virtuales del proceso está utilizando. El uso del espacio de direcciones virtuales no implica necesariamente el uso de páginas de disco o de memoria principal. El espacio virtual es finito, y el proceso puede limitar su capacidad de bibliotecas de carga.

Administrador de tareas de XP: N / A
Administrador de tareas Vista: N / A
Estructura: MEMORYSTATUSEX.ullTotalVirtual-MEMORYSTATUSEX.ullAvailVirtual

Bytes privados

  

Bytes privados es el tamaño actual, en bytes, de la memoria que este proceso ha asignado que no se puede compartir con otros procesos.

Administrador de tareas de XP: VM Tamaño
Administrador de tareas Vista: Commit Tamaño
Estructura: PROCESS_MEMORY_COUNTERS_EX.PrivateUsage

Espacio de trabajo

  

Conjunto de trabajo es el tamaño actual, en bytes, del conjunto de trabajo de este proceso. El espacio de trabajo es el conjunto de páginas de memoria recientemente por los hilos en el proceso. Si la memoria libre en el equipo está por encima de un umbral, las páginas se dejan en el espacio de trabajo de un proceso, incluso si no están en uso. Cuando la memoria libre cae por debajo de un umbral, las páginas se eliminan de los conjuntos de trabajo. Si se necesitan entonces estarán de vuelta suave con fallo en el espacio de trabajo antes de salir de la memoria principal.

Administrador de tareas de XP: Uso de memoria
Administrador de tareas Vista: Conjunto De Trabajo Estructura: PROCESS_MEMORY_COUNTERS_EX.WorkingSetSize

¿Fue útil?

Solución

Las cosas que (puede) aumentar bytes virtuales sin aumentar bytes privados que se me ocurre en este momento:

  • Los binarios son a menudo compartidas (es decir, no privado), pero ocupan espacio de direcciones significativa. Esto puede ser aún mayor que el tamaño del binario

  • El uso de VirtualAlloc para reservar espacio de direcciones secuenciales sin cometer / acceder a él. Administradores de memoria personalizados podría hacer eso.

  • El uso de un archivo de mapeado de memoria (sin acceder por completo)

Otros consejos

Mediante el uso de VirtualAlloc, se puede asignar espacio de direcciones virtuales sin llegar a cualquier reserva de memoria física. Esto debería aumentar "byte virtual" recuento, pero no el tamaño del conjunto de trabajo.

El fuera de la memoria podría ser causado mediante la ejecución de espacio de direcciones debido a la reserva de demasiado espacio de direcciones.

¿Cuál es su lenguaje de programación?

En los marcos administrados, bytes privados representan los datos que se asignan los recursos no administrados. Mientras que los bytes virtuales representan el uso total de memoria (no administrado y gestionado de datos).

Por lo tanto, es muy común ver las diferencias sustanciales entre los bytes privados y virtuales en esos marcos.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top