Partagez votre expérience de PureBasic avec les autres utilisateurs.
Flype
Messages : 2431 Inscription : jeu. 29/janv./2004 0:26
Localisation : Nantes
Message
par Flype » jeu. 02/mars/2006 14:30
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.
popstatic
Messages : 83 Inscription : lun. 20/sept./2004 18:21
Localisation : derriere toi fais gaffe!
Message
par popstatic » lun. 06/mars/2006 21:45
Sympa
juste comme ça, la structure est apparement prédéfinie dans pb4 b5 donc plus simple!
Asus bien? asus tres bien!
Flype
Messages : 2431 Inscription : jeu. 29/janv./2004 0:26
Localisation : Nantes
Message
par Flype » mar. 07/mars/2006 0:05
oui c'est moi qui l'ai demandé à Fred
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
comtois
Messages : 5186 Inscription : mer. 21/janv./2004 17:48
Contact :
Message
par comtois » mer. 05/juil./2006 11:26
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 ?
Flype
Messages : 2431 Inscription : jeu. 29/janv./2004 0:26
Localisation : Nantes
Message
par Flype » mer. 05/juil./2006 12:09
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.