Cómo obtener física y memoria virtual con la llamada de función de API

Seleccione idioma Seleccione idioma
Id. de artículo: 177372 - Ver los productos a los que se aplica este artículo
Este artículo se ha archivado. Se ofrece "tal cual" y no se volverá a actualizar.
Expandir todo | Contraer todo

Resumen

A veces es útil saber la cantidad de memoria física y virtual disponible para Windows y aplicaciones que se ejecutan en Windows. Esto se consigue llamando a la función de interfaz (API) GlobalMemoryStatus() programa de aplicación en Win32 desde Visual FoxPro para Windows.

Más información

El GlobalMemoryStatus() se pasa una estructura MEMORYSTATUS que se define como sigue:
   DWORD dwLength;          // Size of (MEMORYSTATUS).
   DWORD dwMemoryLoad;      // Percent of memory in use.
   DWORD dwTotalPhys;       // Bytes of physical memory.
   DWORD dwAvailPhys;       // Free physical memory file.
   DWORD dwTotalPageFile;   // Bytes of paging file.
   DWORD dwAvailPageFile;   // Free bytes of paging file.
   DWORD dwTotalVirtual;    // User bytes of address space.
   DWORD dwAvailVirtual;    // Free user bytes.
				
para obtener las estadísticas de memoria actual, cree un programa en Visual FoxPro y escriba el código siguiente:
   * Declare API function to retrieve memory information.
   DECLARE GlobalMemoryStatus IN Win32API STRING @MemStat

   #DEFINE CR CHR(13)

   * long2str is passed a dwLength of 32; since structure is 32 bytes long.
   * long2str is appended to a 28 byte blank buffer; a total of 32 bytes.
   m.stru = long2str(32) + REPLICATE(CHR(0), 28)
   =GlobalMemoryStatus(@m.stru)

   * dwLength is 4 bytes, start extracting members at byte 5.
   * Each member is 4 bytes long.
   m.memoryload    = str2long(SUBSTR(m.stru, 5, 4))
   m.totalphys     = str2long(SUBSTR(m.stru, 9, 4))
   m.availphys     = str2long(SUBSTR(m.stru, 13, 4))
   m.totalpagefile = str2long(SUBSTR(m.stru, 17, 4))
   m.availpagefile = str2long(SUBSTR(m.stru, 21, 4))
   m.totalvirtual  = str2long(SUBSTR(m.stru, 25, 4))
   m.availvirtual  = str2long(SUBSTR(m.stru, 29, 4))

   =MESSAGEBOX("Percent memory in use: " + STR(m.memoryload) + CR + ;
   "Bytes of physical memory present: " + STR(m.totalphys) + CR + ;
   "Bytes available physical memory: " + STR(m.availphys) + CR + ;
   "Bytes of paging file: " + STR(m.totalpagefile) + CR + ;
   "Bytes available paging file: " + STR(m.availpagefile) + CR + ;
   "Total virtual memory: " + STR(m.totalvirtual) + CR + ;
   "Available bytes virtual memory: " + STR(m.availvirtual), ;
    0 + 64 + 0, ;
   "GlobalMemoryStatus() results")


   *******************************************************************
   FUNCTION long2str
   *******************************************************************
   * passed : 32-bit non-negative numeric value (m.longval).
   * returns : ASCII character representation of passed value in
   *           low-high format (m.retstr).
   * example :
   *    m.long = 999999
   *    m.longstr = long2str(m.long)

   PARAMETERS m.longval

   PRIVATE i, m.retstr

   m.retstr = ""
   FOR i = 24 TO 0 STEP -8
   m.retstr = CHR(INT(m.longval/(2^i))) + m.retstr
   m.longval = MOD(m.longval, (2^i))
   NEXT
   RETURN m.retstr

   *******************************************************************
   FUNCTION str2long
   *******************************************************************
   * passed:  4-byte character string (m.longstr) in low-high ASCII format.
   * returns: Long integer value.
   *
   * example:
   *   m.longstr = "1111"
   *   m.longval = str2long(m.longstr)

   PARAMETERS m.longstr

   PRIVATE i, m.retval

   m.retval = 0
   FOR i = 0 TO 24 STEP 8
   m.retval = m.retval + (ASC(m.longstr) * (2^i))
   m.longstr = RIGHT(m.longstr, LEN(m.longstr) - 1)
   NEXT
   RETURN m.retval
   * End of GlobalMemoryStatus code
						
Los resultados desde el programa se muestran a continuación.

La figura "Porcentaje de memoria en uso" no tiene que ver con el porcentaje de memoria virtual en uso en el momento nada. En la documentación de Microsoft se ha definido como "una medida de lo ocupado que está el sistema de administración de memoria". Puede calcularse como un 50 por ciento de la relación de confirmadas (solicitada para su uso por una aplicación) páginas de memoria para la física (RAM real) páginas de memoria administradas por Windows 95.

La figura "Bytes de memoria física presente" es la cantidad de RAM física, menos cualquier agujeros en el área de memoria superior (UMA), utilizada por adaptadores y así sucesivamente.

La figura de "Bytes de memoria física disponible" muestra la cantidad de esta memoria física está disponible.

La figura "Bytes del archivo de paginación" es el tamaño del archivo de paginación actual. En esta ilustración representa el número de bytes en el archivo de paginación sin confirmar a cualquier proceso.

La figura "memoria virtual total" indica el tamaño del espacio de direcciones del proceso. En Windows 95, esta cifra es exactamente 4 MB corta de 2 GB. En Windows 95 cada proceso tiene un espacio de direcciones privadas de 2 GB y el inferior 4 MB de este espacio de direcciones está protegido. En Windows NT, en esta ilustración siempre sería 128 KB corta de 2 GB, puesto que Windows protege los 64 KB al inicio y al final 2 GB espacio del proceso de direcciones privadas.

Todas estas cifras sería exactamente el mismo, independientemente de qué proceso denominado GlobalMemoryStatus() excepto la figura "Memoria virtual disponible". Para calcular este valor, GlobalMemoryStatus() agrega todas las áreas libres de espacio de direcciones del proceso. Este número puede reducir y crecer, pero indica que Visual FoxPro para Windows ha reservado aproximadamente 9 MB de su espacio de direcciones de 2 GB en el momento se estaba ejecutando el programa.

Referencias

"Avanzadas de Windows: manual del programador a la API Win32 para Windows NT
3.5 y Windows 95,"Jeffrey Richter, capítulos 4 a 6, Microsoft, 1995

"Windows 95 sistema programación secretos", Matt Pietrek, IDG libros en todo el mundo, 1995

Ayuda de Visual C++: GlobalMemoryStatus

Propiedades

Id. de artículo: 177372 - Última revisión: sábado, 22 de febrero de 2014 - Versión: 2.2
La información de este artículo se refiere a:
  • Microsoft Visual FoxPro 3.0 Standard Edition
  • Microsoft Visual FoxPro 3.0b Standard Edition
  • Microsoft Visual FoxPro 5.0 Standard Edition
  • Microsoft Visual FoxPro 5.0a
  • Microsoft Visual FoxPro 6.0 Professional Edition
Palabras clave: 
kbnosurvey kbarchive kbmt kbcode kbhowto KB177372 KbMtes
Traducción automática
IMPORTANTE: Este artículo ha sido traducido por un software de traducción automática de Microsoft (http://support.microsoft.com/gp/mtdetails) en lugar de un traductor humano. Microsoft le ofrece artículos traducidos por un traductor humano y artículos traducidos automáticamente para que tenga acceso en su propio idioma a todos los artículos de nuestra base de conocimientos (Knowledge Base). Sin embargo, los artículos traducidos automáticamente pueden contener errores en el vocabulario, la sintaxis o la gramática, como los que un extranjero podría cometer al hablar el idioma. Microsoft no se hace responsable de cualquier imprecisión, error o daño ocasionado por una mala traducción del contenido o como consecuencia de su utilización por nuestros clientes. Microsoft suele actualizar el software de traducción frecuentemente.
Haga clic aquí para ver el artículo original (en inglés): 177372

Enviar comentarios

 

Contact us for more help

Contact us for more help
Connect with Answer Desk for expert help.
Get more support from smallbusiness.support.microsoft.com