Page 1 sur 1
SizeOf() peut-il retourner la taille d'un pointeur ?
Publié : lun. 13/nov./2006 15:16
par comtois
Dreamotion3D travaille avec des pointeurs, j'avais besoin de stocker plusieurs entitys, donc j'ai fait un tableau de pointeur
Ensuite j'avais besoin de recopier ce tableau , alors j'ai fait
Et là j'arrive à ma question, pour représenter la taille d'un pointeur j'ai dû mettre
, mais ce sera faux quand on sera en 64 bits, donc je me demandais s'il existait une constante , une commande qui renvoie la taille d'un pointeur pour le compilo actuel ?
De façon à ne pas avoir à changer mon code quand on sera en 64 bits, ok j'anticipe un peu, c'est surtout pour dire que s'il n'y a rien qui existe pour ça, c'est peut-être une suggestion à faire ?
Publié : lun. 13/nov./2006 18:58
par Dr. Dri
pas bête, je verrais bien une constante pour ca
#PB_Compiler_Bits ou un truc dans le genre
Dri
Publié : lun. 13/nov./2006 19:17
par Anonyme2
simplement ce type de code fonctionne mais n'est pas générique.
si on change le type de valeur pointée (par ex byte au lieu de quad ou une structure) on a toujours la taille de 4 octets (pour un stockage en 32 bits)
On pourrais aussi tester le type de processeur, 32 ou 64 bits
Publié : lun. 13/nov./2006 19:44
par comtois
Faudrait peut-être que je fasse un truc comme ça alors ?
Code : Tout sélectionner
Structure s_Pointeur
*pointeur
EndStructure
Debug SizeOf(s_Pointeur)
Publié : lun. 13/nov./2006 19:48
par Flype
il y a bien çà pour tester à l'exécution (donc pas à la compilation) si le soft tourne sur une machine 32bits (resultat=0) ou sur une machine 64bits (resultat=1) :
Wow64 c'est pour 'Windows On Windows 64' (code 32bits émulé) :
Code : Tout sélectionner
Import "kernel32.lib"
IsWow64Process(pid.l, *result)
EndImport
Procedure.l IsWow64() ; Windows XP
Protected result.l
IsWow64Process(GetCurrentProcess_(), @result)
ProcedureReturn result
EndProcedure
Debug IsWow64()
mais çà va pas trop aider là je pense.
Publié : lun. 13/nov./2006 19:55
par Flype
comtois a écrit :Faudrait peut-être que je fasse un truc comme ça alors ?
Code : Tout sélectionner
Structure s_Pointeur
*pointeur
EndStructure
Debug SizeOf(s_Pointeur)
oui je pense que çà fonctionnera.
ou même çà - çà devrait suffir :
Code : Tout sélectionner
Global *dummy
#PointerSize = SizeOf(*dummy)
Debug #PointerSize
mais bon tant que purebasic n'est pas passé en 64bits ca sert peut etre à rien puisqu'on ne sait pas comment fred l'implémentera (ni quand).
Publié : lun. 13/nov./2006 20:38
par Dr. Dri
Flype a écrit :il y a bien çà pour tester à l'exécution (donc pas à la compilation) si le soft tourne sur une machine 32bits (resultat=0) ou sur une machine 64bits (resultat=1)
Peu importe, du 32 bits sera émulé sur du 64 bits et la taille des pointeurs ne changera pas
c'est vraiment à la compilation que c'est important
sinon dans la lignée des Long Byte et consors
Dri
Publié : lun. 13/nov./2006 20:49
par comtois
Exactement, on a les structures Byte, Long, Quad, Float, String etc
Manque la structure Pointer .
[EDIT]
Je viens de faire la suggestion sur le forum anglais, avec mon mauvais anglais j'espère qu'on me comprendra quand même

Publié : mar. 14/nov./2006 13:26
par Anonyme2
comtois a écrit :Exactement, on a les structures Byte, Long, Quad, Float, String etc
Manque la structure Pointer .
[EDIT]
Je viens de faire la suggestion sur le forum anglais, avec mon mauvais anglais j'espère qu'on me comprendra quand même

Il manque simplement le pointeur sans type qui ne permet pas d'accèder aux valeurs mais permet la permutation ou l'incrément ou autre chose sur l'adresse.