Sur un système 64 bits, il y a plusieurs choix possible pour les tailles des types int, long et des pointeurs.
Le plus fréquemment recontré (et considéré comme le plus viable) est le modèle I32LP64, dans lequel un int fait 32 bits, et un long comme un pointeur font 64 bits. C'est le modèle utilisé par à peu près tous les Un*x sur 64 bits (dont Linux).
On a donc :
sizeof(int) = 4, aligné sur 4 octets
sizeof(long) = 8, aligné sur 8 octets.
La définition du type long long est plus "aléatoire" et pourra varier d'un système à l'autre ou d'une plate-forme à l'autre. En général on définit long long comme long, donc 8 octets.
De toute façon pour du code portable, on s'en fiche un peu. On sait que l'on a sizeof(int) <= sizeof(long) <= sizeof(long long), et que comme peu d'architectures apprécient les accès non alignés, qu'une variable de type long est forcément alignée à une adresse multiple de sizeof(long). Pas la peine de se coltiner des #define ou des valeurs magiques.
# C'est pourtant simple...
Posté par Miod in the middle . En réponse au message [requete]Test de mémoire sur une machine 64 bits. Évalué à 3.
Le plus fréquemment recontré (et considéré comme le plus viable) est le modèle I32LP64, dans lequel un int fait 32 bits, et un long comme un pointeur font 64 bits. C'est le modèle utilisé par à peu près tous les Un*x sur 64 bits (dont Linux).
On a donc :
sizeof(int) = 4, aligné sur 4 octets
sizeof(long) = 8, aligné sur 8 octets.
La définition du type long long est plus "aléatoire" et pourra varier d'un système à l'autre ou d'une plate-forme à l'autre. En général on définit long long comme long, donc 8 octets.
De toute façon pour du code portable, on s'en fiche un peu. On sait que l'on a sizeof(int) <= sizeof(long) <= sizeof(long long), et que comme peu d'architectures apprécient les accès non alignés, qu'une variable de type long est forcément alignée à une adresse multiple de sizeof(long). Pas la peine de se coltiner des #define ou des valeurs magiques.