Page 1 sur 1

Bizarrrrrrrrre !!!!!

Publié : sam. 04/août/2007 2:15
par Mytic
J’ai remarqué un phénomène bizarre avec PureBasic.
Je vous explique !!
J’ai deux partitions dans mon disque dur (C: et D:)
C est full , il ne restait que 212 Mo.
Alors j’ai remarqué que à chaque fois que j’exécutai un programme dans PureBasic , y’avais le message Windows de nettoyage « Votre disque dur est plein ».
Alors là , la découverte , à chaque fois que j’éxecutai ce bout de Code , environ 100 Mo de disque dur disparaît 8O , et ne revient que quand je fermai PureBasic.
Et j’ai essayais avec d’autre Code et rien ne ce passé.
Voilà le bout de code dévoreur de Disque dur !!!

Code : Tout sélectionner

InitSprite()
UsePNGImageDecoder()
UseJPEGImageDecoder()
OpenWindow(0,0,0,500,500,"")
OpenWindowedScreen(WindowID(0),0,0,500,500,0,0,0)
InitKeyboard()
Global Dim imageg.l(9999,9999)
Global Dim image.l(9999,9999)
LoadImage(0,"c:\image.jpg")
Dites moi si c’est la même chose chez vous ?! :wink:

Publié : sam. 04/août/2007 8:23
par Crystal Noir
Je n'ai pas ce soucis cependant l'explication peut être celle-ci.

Tu utilises deux tableaux de dimensions ENORMES.

Chaque tableau pour avoir 99980002 élements :D Soit un total de 199960004 éléments....

Il faut pouvoir les stocker. Je pense qu'il n'est pas impossible que windows utilise son fichier d'échange (swap) pour stocker le surplus qu'il ne peut pas stocker dans la mémoire.

Personnellement j'évite d'utiliser des tableaux avec de telle dimension, si j'ai besoin de beaucoup d'éléments je préfère utiliser les listes qui sont là pour cela.

hors limite

Publié : sam. 04/août/2007 8:44
par beauregard
Mytic a écrit : Global Dim imageg.l(9999,9999)
Global Dim image.l(9999,9999)
8O
je ne sais pas quel jeu tu nous prépare, mais avec ça, ça ne peut qu'être énorme ! ;)

Publié : sam. 04/août/2007 12:05
par Flype
ca fait quand meme : 2 * ( ( 9999 * 9999 ) * 4 ) = 762 Mo !!!

Code : Tout sélectionner

;----------

Import "shlwapi.lib"
  StrFormatByteSizeA(size.l, *StrBuffer, LenBuffer.l)
EndImport

Macro StrFormatByteSize(size)
  PeekS(StrFormatByteSizeA(size, @res.s{32}, 32))
EndMacro

;----------

Dimension.l = 9999

Dim Test1.l(Dimension, Dimension)
Dim Test2.l(Dimension, Dimension)

NbOctets = @Test1(Dimension, Dimension) - @Test1(0, 0)
NbOctets + @Test2(Dimension, Dimension) - @Test2(0, 0)

Debug StrFormatByteSize( NbOctets )

;----------


bref, rien d'étonnant à ce que windows swap avec la mémoire virtuelle :D

Publié : sam. 04/août/2007 18:45
par Anonyme
2 * ( ( 9999 * 9999 ) * 4 )
Ton calcul est faux :D un sprite prend plus de 4 octect en mémoire , regarde rien que la structure PB_Sprite3D , puis viens s'ajouté a cela chaque pixel codé sur 4 octets chacun en 32 bit , donc c'est enorme :D

Publié : sam. 04/août/2007 19:39
par comtois
Cpl.Bator a écrit :
2 * ( ( 9999 * 9999 ) * 4 )
Ton calcul est faux :D un sprite prend plus de 4 octect en mémoire , regarde rien que la structure PB_Sprite3D , puis viens s'ajouté a cela chaque pixel codé sur 4 octets chacun en 32 bit , donc c'est enorme :D
Oui le calcul est faux, pas parce qu'il s'agit de sprites , mais parce qu'un tableau imageg.l(9999,9999) ne contient pas 9999*9999 éléments mais 10000*10000 :)

Publié : sam. 04/août/2007 21:19
par beauregard
comtois a écrit : ne contient pas 9999*9999 éléments mais 10000*10000 :)
le 0 ça compte effectivement, chose que j'avais oublié en me remettant à la programmation.

comtois, en parcourant les nombreux post des différents forums, je suis tombé sur une proposition de ta part pour réaliser un jeu en commun, et je suis assez triste que cela n'a pas aboutis.
Je tiens à te remercie pour tout ce que tu as fait.

merci
:D