OS en 32/64 bits

Vous débutez et vous avez besoin d'aide ? N'hésitez pas à poser vos questions
lionel_om
Messages : 1500
Inscription : jeu. 25/mars/2004 11:23
Localisation : Sophia Antipolis (Nice)
Contact :

OS en 32/64 bits

Message par lionel_om »

Bonjour,

Si je ne me trompe pas, les adresses des variables, fonctiosn, ... sont en 32 ou 64 bits selon la version de l'OS.

Je voudrais faire une structure qui serait définie avec les commande de pré-compilation (directive du compilo) afin de définir une structure (MemAddress) pour quelle soit dérivée d'un Long.
Le but est au final de créer une Lib avec TailBite, je sais pas si c'est possible ou si faut compiler deux version différentes.

Je ne sais pas s'il y a vraiment un problème ou vraiement une solution.
J'espère être assez clair...

Voilà un mini bout de bout pour expliciter un peu plus :

Code : Tout sélectionner

Structure MemAddress Extends Long
EndStructure

Debug SizeOf(MemAddress)
Merci d'avance
Lionel :wink:
Webmestre de Basic-univers
Participez à son extension: ajouter vos programmes et partagez vos codes !
Avatar de l’utilisateur
Progi1984
Messages : 2659
Inscription : mar. 14/déc./2004 13:56
Localisation : France > Rennes
Contact :

Message par Progi1984 »

De mémoire, PB ne gère pas le 64bits !
lionel_om
Messages : 1500
Inscription : jeu. 25/mars/2004 11:23
Localisation : Sophia Antipolis (Nice)
Contact :

Message par lionel_om »

Progi1984 a écrit :De mémoire, PB ne gère pas le 64bits !
Je crois que si car quelqu'un avait posté quelquechose en disant que SizeOf(Long) renvoyé 4 ou 8 (octets) selon la version de l'OS.

Mais en fait, je ne pense pas avoir réellement de problème car les Long s'adaptent automatiquement et je pense que les pointer aussi.
Le seul vrai pb est le fait que soit je distriburais ma Lib directement avec le source (ce qui n'ets pas un problème) ou soit compilée 2 fois avec TailBite sur des OS 32/64 bits (avec les sources toujours :P )

Lionel
Webmestre de Basic-univers
Participez à son extension: ajouter vos programmes et partagez vos codes !
KarLKoX
Messages : 1191
Inscription : jeu. 26/févr./2004 15:36
Localisation : France
Contact :

Message par KarLKoX »

Sur un OS 64 bits, tu as deux mode de fonctionnement : 64 bits et mode compatible.
Etant donné que PB ne supporte pas le 64 bits de manière native (mode long), c'est à dire que le compilateur ne produit pas de code COFF x64, le code reste en 32 bits et fonctionnera en mode compatibilité.
Tout est récapitulé ici.
Dernière modification par KarLKoX le jeu. 07/juin/2007 7:58, modifié 1 fois.
"Qui baise trop bouffe un poil." P. Desproges
Dr. Dri
Messages : 2527
Inscription : ven. 23/janv./2004 18:10

Message par Dr. Dri »

PB ne propose pas de compilation 64bits à ma connaissance
et si c'était le cas ca ne serait pas le type "long" en lui même qui changerais mais plutôt le type par défaut qui passerai au quad

Dri
KarLKoX
Messages : 1191
Inscription : jeu. 26/févr./2004 15:36
Localisation : France
Contact :

Message par KarLKoX »

Il changerais en LONG_PTR ;)
"Qui baise trop bouffe un poil." P. Desproges
lionel_om
Messages : 1500
Inscription : jeu. 25/mars/2004 11:23
Localisation : Sophia Antipolis (Nice)
Contact :

Message par lionel_om »

KarLKoX a écrit :Sur un OS 64 bits, tu as deux mode de fonctionnement : 64 bits et mode compatible.
Etant donné que PB ne supporte pas le 64 bits de manière native (mode long), c'est à dire que le compilateur ne produit pas de code COFF x64, le code reste en 32 bits et fonctionnera en mode compatibilité.
Tout est récapitulé ici.
Je vais je ter un oeil.
Merci de ta réponse :wink:

Lio
Webmestre de Basic-univers
Participez à son extension: ajouter vos programmes et partagez vos codes !
lionel_om
Messages : 1500
Inscription : jeu. 25/mars/2004 11:23
Localisation : Sophia Antipolis (Nice)
Contact :

Message par lionel_om »

Dr. Dri a écrit :PB ne propose pas de compilation 64bits à ma connaissance
et si c'était le cas ca ne serait pas le type "long" en lui même qui changerais mais plutôt le type par défaut qui passerai au quad

Dri
Donc faut pas que je type mes variables qui pointent sur une zone mémoire ?

Lio
Webmestre de Basic-univers
Participez à son extension: ajouter vos programmes et partagez vos codes !
Dr. Dri
Messages : 2527
Inscription : ven. 23/janv./2004 18:10

Message par Dr. Dri »

KarLKoX a écrit :Il changerais en LONG_PTR ;)
Gné ?
lionel_om a écrit :Donc faut pas que je type mes variables qui pointent sur une zone mémoire ?

Lio
Les pointeurs ne sont intéressants que si le type est une structure ou une chaîne de caractères.

Dri
KarLKoX
Messages : 1191
Inscription : jeu. 26/févr./2004 15:36
Localisation : France
Contact :

Message par KarLKoX »

Dr. Dri a écrit :
KarLKoX a écrit :Il changerais en LONG_PTR ;)
Gné ?

Dri
/* Win32 or Win64 dependent typedef/defines. */

#ifdef _WIN64

typedef signed __int64 INT_PTR, *PINT_PTR;
typedef signed __int64 LONG_PTR, *PLONG_PTR;

typedef unsigned __int64 UINT_PTR, *PUINT_PTR;
typedef unsigned __int64 ULONG_PTR, *PULONG_PTR;
typedef unsigned __int64 DWORD_PTR, *PDWORD_PTR;

#define MAXINT_PTR 0x7fffffffffffffff
#define MININT_PTR 0x8000000000000000
#define MAXUINT_PTR 0xffffffffffffffff

typedef int HALF_PTR, *PHALF_PTR;
typedef unsigned int UHALF_PTR, *PUHALF_PTR;

#define MAXHALF_PTR 0x7fffffff
#define MINHALF_PTR 0x80000000
#define MAXUHALF_PTR 0xffffffff

#else /* FIXME: defined(_WIN32) */

typedef int INT_PTR, *PINT_PTR;
typedef long LONG_PTR, *PLONG_PTR;

typedef unsigned int UINT_PTR, *PUINT_PTR;
typedef unsigned long ULONG_PTR, *PULONG_PTR;
typedef ULONG_PTR DWORD_PTR, *PDWORD_PTR;

[...]
Lien ;)
"Qui baise trop bouffe un poil." P. Desproges
Dr. Dri
Messages : 2527
Inscription : ven. 23/janv./2004 18:10

Message par Dr. Dri »

le type int ne fait pas 64 bits sur une architecture 64 bits ?
(équivalent de long long int nan ?)

Dri
KarLKoX
Messages : 1191
Inscription : jeu. 26/févr./2004 15:36
Localisation : France
Contact :

Message par KarLKoX »

En théorie, oui c'est le cas, pour gcc en tout cas mais en fait, ça dépend du compilo, exemple, chez kro$oft, faut obligatoirement passer par __int64 (long_ptr n'est qu'un typedef de ce type), va comprendre pourquoi ... :roll:
"Qui baise trop bouffe un poil." P. Desproges
Avatar de l’utilisateur
Flype
Messages : 2431
Inscription : jeu. 29/janv./2004 0:26
Localisation : Nantes

Message par Flype »

sinon, il y a une fonction IsWow64() de l'api windows pour savoir si le processus tourne en 32 ou 64bits (Windows Vista ou Windows XP) :

http://www.purebasic.fr/french/viewtopic.php?t=5325
Image
Répondre