La norme C permet aux pointeurs de différents types d'avoir des tailles différentes, par ex. sizeof(char*) != sizeof(int*)
est autorisé. Il exige toutefois que si un pointeur est converti en void*
et qu'il soit ensuite converti en son type d'origine, il doit être comparable à sa valeur d'origine. Par conséquent, il suit logiquement que sizeof(void*) >= sizeof(T*)
pour tous les types T
, correct? Sur la plupart des plates-formes courantes (x86, PPC, ARM et variantes 64 bits, etc.), la taille de tous les pointeurs est égale à la taille du registre natif (4 ou 8 octets), quel que soit le point taper. Existe-t-il des plates-formes ésotériques ou intégrées dans lesquelles les pointeurs vers différents types peuvent avoir des tailles différentes? Je suis spécifiquement à propos de données pointeurs, mais je serais également intéressé de savoir s'il existe des plates-formes où pointeurs fonction ont des tailles inhabituelles.Existe-t-il des plates-formes où les pointeurs vers différents types ont des tailles différentes?
Je suis définitivement et non je me suis renseigné sur les pointeurs-membres et les fonctions pointeur-vers-membre de C++. Ceux-ci prennent des tailles inhabituelles sur des plates-formes communes et peuvent même varier au sein d'une plate-forme, selon les propriétés de la classe pointeur-vers (non-polymorphe, héritage unique, héritage multiple, héritage virtuel ou type incomplet).
Pourriez-vous poster cette section? – JaredPar
Nit-pick: le "type intégral natif" en C doit être int, ce qui est rarement 64 bits, même sur les plates-formes 64 bits, AFAIK. En d'autres termes, LP64 est plus commun que ILP64. – unwind
@JaredPar: Je ne sais pas exactement où il est dit dans la norme, mais cette page http://www.lysator.liu.se/c/rat/d9.html#4-9-6-1 fait mention en ce qui concerne le spécificateur de format% p fprintf. @unwind: s/taille de l'entier natif/taille du registre natif/ –