240 votes

Sizeof (certains pointeur) est toujours égale à quatre ?

Par exemple : renvoie 4. Tout comme , `` , tout ce que j’ai essayé. Y a-t-il des exceptions à cette règle ?

204voto

David Thornley Points 39051

La garantie que vous obtenez est que sizeof(char) == 1. Il n’y a aucune autre garantie, y compris non garantie que sizeof(int ) == sizeof(double ).

Dans la pratique, les pointeurs sera taille 2 sur un système 16 bits (si vous pouvez en trouver un), 4 sur un système 32 bits et 8 sur un système 64 bits, mais il n’y a rien à gagner en s’appuyant sur une taille donnée.

38voto

Eclipse Points 27662

Même sur une plaine x86 plate-forme 32 bits, vous pouvez obtenir une variété de tailles de pointeur, essayer ceci par un exemple :

Sous Visual C++ 2008, je reçois 4, 12 et 8 pour les tailles de la pointeurs de membre-fonction.

Raymond Chen a parlé de cette ici.

31voto

dmityugov Points 2786

Juste une autre exception à la liste déjà affichée. Sur les plateformes 32 bits, pointeurs peuvent prendre 6, pas 4octets :

Si vous compilez ce programme avec Open Watcom et exécutez, vous obtiendrez 6, parce que des pointeurs far qu’il soutient se composent d’offset de 32 bits et valeurs 16 bits segment

24voto

FryGuy Points 5999

Si vous compilez pour une machine 64 bits, alors il sera 8.

17voto

Joseph Garvin Points 6074

Techniquement parlant, la norme ne garantit que sizeof(char) == 1, et le reste est à la mise en œuvre. Mais sur le moderne, les architectures x86 (par exemple Intel/AMD, puces), il est assez prévisible.

Vous avez probablement entendu parler des processeurs décrit comme étant de 16 bits, 32 bits, 64 bits, etc. Généralement, cela signifie que le processeur utilise N-bits pour les entiers. Puisque les pointeurs de stocker en mémoire les adresses et les adresses mémoire sont des nombres entiers, effectivement cela vous indique combien de bits sont utilisés pour les pointeurs. sizeof est généralement mesurée en octets, de sorte que le code compilé pour les processeurs 32 bits rendra compte de la taille des pointeurs à 4 (32 bits / 8 bits par octet), et le code pour les processeurs 64 bits, fera rapport à la taille des pointeurs à 8 (64 bits / 8 bits par octet). C'est là que la limitation de 4 GO de RAM pour les processeurs 32 bits proviennent -- si chaque adresse mémoire correspond à un octet, d'adresser plus de mémoire vous avez besoin des entiers de plus de 32-bits.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X