[PB4] Mémoire disponible

Partagez votre expérience de PureBasic avec les autres utilisateurs.
Avatar de l’utilisateur
Flype
Messages : 2431
Inscription : jeu. 29/janv./2004 0:26
Localisation : Nantes

[PB4] Mémoire disponible

Message 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
Dernière modification par Flype le mer. 05/juil./2006 12:10, modifié 1 fois.
Image
popstatic
Messages : 83
Inscription : lun. 20/sept./2004 18:21
Localisation : derriere toi fais gaffe!

Message par popstatic »

Sympa ;)

juste comme ça, la structure est apparement prédéfinie dans pb4 b5 donc plus simple!
Asus bien? asus tres bien!
Avatar de l’utilisateur
Flype
Messages : 2431
Inscription : jeu. 29/janv./2004 0:26
Localisation : Nantes

Message 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 
Image
comtois
Messages : 5186
Inscription : mer. 21/janv./2004 17:48
Contact :

Message 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 ?
http://purebasic.developpez.com/
Je ne réponds à aucune question technique en PV, utilisez le forum, il est fait pour ça, et la réponse peut profiter à tous.
Avatar de l’utilisateur
Flype
Messages : 2431
Inscription : jeu. 29/janv./2004 0:26
Localisation : Nantes

Message 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.
Image
Répondre