Page 1 sur 1

[PB4] Mémoire disponible

Publié : jeu. 02/mars/2006 14:30
par Flype
Compatible avec des tailles en 64bits, merci les Quads de PB4:

Code : Tout sélectionner

; http://msdn.microsoft.com/library/default.asp?url=/library/en-us/memory/base/memorystatusex_str.asp

Structure MEMORYSTATUSEX
  dwLength.l
  dwMemoryLoad.l
  ullTotalPhys.q
  ullAvailPhys.q
  ullTotalPageFile.q
  ullAvailPageFile.q
  ullTotalVirtual.q
  ullAvailVirtual.q
  ullAvailExtendedVirtual.q
EndStructure

Prototype.l GlobalMemoryStatusEx(*lpBuffer)

If OpenLibrary(0,"kernel32.dll")
  GlobalMemoryStatusEx.GlobalMemoryStatusEx = GetFunction(0,"GlobalMemoryStatusEx")
EndIf

memex.MEMORYSTATUSEX
memex\dwLength = SizeOf(MEMORYSTATUSEX)

If GlobalMemoryStatusEx(@memex)
  Debug memex\dwMemoryLoad
  Debug memex\ullTotalPhys
  Debug memex\ullAvailPhys
  Debug memex\ullTotalPageFile
  Debug memex\ullAvailPageFile
  Debug memex\ullTotalVirtual
  Debug memex\ullAvailVirtual
  Debug memex\ullAvailExtendedVirtual
EndIf

Publié : lun. 06/mars/2006 21:45
par popstatic
Sympa ;)

juste comme ça, la structure est apparement prédéfinie dans pb4 b5 donc plus simple!

Publié : mar. 07/mars/2006 0:05
par Flype
oui c'est moi qui l'ai demandé à Fred :D

du coup:

Code : Tout sélectionner

memex.MEMORYSTATUSEX
memex\dwLength = SizeOf(MEMORYSTATUSEX)

If GlobalMemoryStatusEx_(@memex)
  Debug memex\dwMemoryLoad
  Debug memex\ullTotalPhys
  Debug memex\ullAvailPhys
  Debug memex\ullTotalPageFile
  Debug memex\ullAvailPageFile
  Debug memex\ullTotalVirtual
  Debug memex\ullAvailVirtual
  Debug memex\ullAvailExtendedVirtual
EndIf 

Publié : mer. 05/juil./2006 11:26
par comtois
Suite à une discussion sur les limites des tableaux avec Leo.cd sur un autre forum (GCN) , j'ai testé ce code.
Mais concrètement qu'elle est la mémoire utilisée pour les tableaux ou par allocatememory ?

Admettons que je veuille créer un tableau avec le maximum de mémoire disponible que faut-il utiliser ?

memex\ullAvailPhys ?
à quoi correspond les autres données ?

Publié : mer. 05/juil./2006 12:09
par Flype
si tu divises la valeur 'memex\ullAvailPhys' par la taille mémoire d'un élément d'un tableau, tu obtiendras le nombre d'éléments

en gros :

Code : Tout sélectionner

memex.MEMORYSTATUSEX
memex\dwLength = SizeOf(MEMORYSTATUSEX)

If GlobalMemoryStatusEx_(@memex)
  
  nElements = ( memex\ullAvailPhys / SizeOf(DIBSECTION) )
  
  Redim mon_tableau.DIBSECTION( nElements )
  
EndIf
les autres champs correspondent à la mémoire virtuelle, donc vaut mieux l'ignorer pour le coup, je pense.