Page 1 sur 1

sizeof ...

Publié : sam. 22/sept./2007 21:47
par jerexgrz
Sizeof permet de connaitre la taille en octet d'une variable.
a.l
debug sizeof(a)

par contre, j'aimerais connaitre la taille de mon tableau ???
global dim tab.l(10,64,64)

anyone have an idea :?:

Publié : sam. 22/sept./2007 23:42
par Lna
Cela se calcul par des multiplications. 8)

Il ne faut pas oublier de compter l'élément 0 en rajoutant 1 et de multiplier le tout par 4 pour le format '.l'. 8O

'global dim tab.l(10,64,64)'

(10+1) * (64+1) * (64+1) * 4 = 185900 octets. :idea:

@ peluche

Publié : dim. 23/sept./2007 10:50
par jerexgrz
:lol: ok merci !

Publié : dim. 23/sept./2007 16:31
par Lna
Sur le forum anglophone, il y a le sujet 'SizeOf( Array() )' qui pourrait limiter les calculs. 8O

http://www.purebasic.fr/english/viewtop ... 67&start=0
http://www.purebasic.fr/english/viewtop ... 7&start=15

Cela reste une piste intéressante. 8)

@ peluche

Publié : dim. 23/sept./2007 21:48
par Ollivier
Merci pour ta recherche Lna!

Code : Tout sélectionner

Procedure.l ArrayMemorySize(*Array) 
  !sub [p.p_Array], dword 20
  !push dword [p.p_Array] 
  !push dword 0 
  !push dword [PB_MemoryBase] 
  !call _HeapSize@12 
  ProcedureReturn 
  HeapSize_(0, 0, 0) ; make sure, _HeapSize@12 is defined 
EndProcedure 

Procedure ArraySize(*Array) 
  ProcedureReturn PeekL(*Array-8) 
EndProcedure 


Dim Array.B(511)

Debug "Taille en octets : " + Str(ArrayMemorySize(@Array() ) )
Debug "Quantité d'éléments : " + Str(ArraySize(@Array() ) )
Par contre, les tableaux de chaînes demandent hélas un tout petit peu plus de calculs...