2012-10-04 4 views
1

Juste une petite question:Taille des pointeurs de pointeurs en mémoire

sur une machine 32 bits, est un pointeur vers un pointeur (**p) va être 4 octets?

+1

Oui, au moins en général (c'est-à-dire qu'il peut y avoir un système bizarre que l'on considère normalement comme "32 bits", mais si c'est le cas, c'est plutôt obscur). –

+0

Une raison pour laquelle il ne devrait pas être? – krlmlr

+0

raison pour laquelle un compilateur pourrait essayer de faire quelque chose de rusé pour une raison quelconque en fonction de l'architecture du processeur, c'est-à-dire, il pourrait être de 8 octets. –

Répondre

2

La logique est que les pointeurs ne sont que des adresses mémoire. L'adresse mémoire de entité stockée dans une machine avec des adresses 32 bits est presque certainement 4 octets. Par conséquent, l'adresse mémoire d'un pointeur stocké est de 4 octets. Par conséquent un pointeur sur un pointeur est de 4 octets. Rien de tout cela n'est promis par la norme ISO C. C'est juste la façon dont presque toutes les implémentations se révèlent.

2

oui ... ce sera 4 octets ... mais ce n'est pas garanti.

+0

qu'est-ce que tu veux dire par "mais ce n'est pas garanti."? –

+0

il n'y a pas une spécification qui dit qu'il doit être cela, mais généralement les compilateurs le font 4. –

1

Correct. Les pointeurs ont généralement une taille fixe. Sur une machine 32 bits, ils sont généralement 32 bits (= 4 octets)

1

En règle générale oui, les adresses sur les machines 32 bits seront de 4 octets.

pari meilleur si vous ne voulez pas faire des hypothèses est géré l'ancien sizeof(p)

1

D'autres ont déjà mentionné qu'il s'agit très certainement de 32 bits ou de 4 octets de 8 bits. Cependant, en fonction du matériel et du compilateur, il peut être inférieur ou supérieur à celui-ci. Si votre machine ne peut adresser sa mémoire que sous la forme d'unités 32 bits aux limites de 32 bits, vous devrez avoir un pointeur plus grand vers l'adresse et accéder aux portions de 8 bits (chars/bytes) de chaque mémoire de 32 bits cellule. Si le compilateur décide ici de ne pas avoir de pointeurs de tailles différentes, tous les pointeurs (y compris les pointeurs vers les pointeurs) deviennent longs de 34 + bits.

De même, si le programme est très petit et peut tenir dans 64 Ko, le compilateur peut être capable de réduire tous les pointeurs à 16 bits.