Help and Support
 

powered byLive Search

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

Id. de artículo:177372
Última revisión:jueves, 01 de julio de 2004
Versión:2.2

Resumen

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

Volver al principio

Más información

El GlobalMemoryStatus() se pasa una estructura MEMORYSTATUS que se define de la manera siguiente:
   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 actuales, crear un programa en Visual FoxPro y escriba el siguiente código:
   * 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
						
A continuación se muestran los resultados del programa.

La figura "porcentaje memoria en uso" no tiene nada que ver con el porcentaje de memoria virtual en uso en el momento. En la documentación de Microsoft está definido como "una medida de lo ocupado que esté el sistema de administración de memoria es". Se pueden calcular como 50 por ciento de la relación entre la confirmado (solicitada para su uso por una aplicación) las páginas de memoria para la física (RAM real) las páginas de memoria administradas por Windows 95.

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

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

La figura "bytes del archivo de paginación de" es el tamaño del archivo de paginación actual. Esta figura representa el número de bytes en el archivo de paginación que se sin confirmar a cualquier proceso.

La figura " total de memoria virtual " indica el tamaño del espacio de direcciones del proceso. En Windows 95, esta cifra es exactamente 4 MB corto 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á protegida. En Windows NT, esta cifra siempre sería 128 KB escasez de 2 GB, puesto que Windows NT protege los 64 KB al principio y final del espacio de dirección privada de 2 GB del proceso.

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

Volver al principio

Referencias

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

"Sistema de Windows 95 de programación de secretos," Matt Pietrek, IDG Worldwide, libros 1995

La Ayuda de Visual C++: GlobalMemoryStatus

Volver al principio


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

Volver al principio

Palabras clave: 
kbmt kbcode kbhowto KB177372 KbMtes

Volver al principio

Traducción automáticaIMPORTANTE: 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. Si ve errores y desea ayudar con este esfuerzo, rellene la encuesta en la parte inferior de este artículo.
Haga clic aquí para ver el artículo original (en inglés): 177372 (http://support.microsoft.com/kb/177372/en-us/)

Volver al principio

Seleccione idioma

 

Other Support Options

  • Need More Help?
    Contact a Support professional by E-mail, Online or Phone.
  • Customer Service
    For non-technical assistance with product purchases, subscriptions, online services, events, training courses, corporate sales, piracy issues, and more.
  • Newsgroups
    Pose a question to other users. Discussion groups and Forums about specific Microsoft products, technologies, and services.