SizeOf() peut-il retourner la taille d'un pointeur ?

Sujets variés concernant le développement en PureBasic
comtois
Messages : 5186
Inscription : mer. 21/janv./2004 17:48
Contact :

SizeOf() peut-il retourner la taille d'un pointeur ?

Message par comtois »

Dreamotion3D travaille avec des pointeurs, j'avais besoin de stocker plusieurs entitys, donc j'ai fait un tableau de pointeur

Code : Tout sélectionner

*Rubik(2,2,2)
Ensuite j'avais besoin de recopier ce tableau , alors j'ai fait

Code : Tout sélectionner

CopyMemory(*Rubik(), *TempRubik(), SizeOf(Long) * 27)
Et là j'arrive à ma question, pour représenter la taille d'un pointeur j'ai dû mettre

Code : Tout sélectionner

SizeOf(Long)
, 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 ?
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.
Dr. Dri
Messages : 2527
Inscription : ven. 23/janv./2004 18:10

Message par Dr. Dri »

pas bête, je verrais bien une constante pour ca
#PB_Compiler_Bits ou un truc dans le genre

Dri
Anonyme2
Messages : 3518
Inscription : jeu. 22/janv./2004 14:31
Localisation : Sourans

Message par Anonyme2 »

simplement ce type de code fonctionne mais n'est pas générique.

Code : Tout sélectionner

*essai.quad

Debug SizeOf(*essai)
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
comtois
Messages : 5186
Inscription : mer. 21/janv./2004 17:48
Contact :

Message 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)
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 »

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.
Image
Avatar de l’utilisateur
Flype
Messages : 2431
Inscription : jeu. 29/janv./2004 0:26
Localisation : Nantes

Message 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).
Image
Dr. Dri
Messages : 2527
Inscription : ven. 23/janv./2004 18:10

Message 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

Code : Tout sélectionner

Structure Pointer
  *p
EndStructure
Dri
comtois
Messages : 5186
Inscription : mer. 21/janv./2004 17:48
Contact :

Message 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 :?
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.
Anonyme2
Messages : 3518
Inscription : jeu. 22/janv./2004 14:31
Localisation : Sourans

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