Combien d'octets faire des pointeurs de prendre?
Je suis peu confus sur les pointeurs et combien d'octets qu'ils prennent. Dans mon manuel il est le premier à dire que les pointeurs sur 16 bits systèmes prennent 2 octets, 32 bits des systèmes d'information 4 octets, 64 bits du système d'8 octets, et ainsi de suite. Puis 10 lignes après, il est dit que les pointeurs de la prendre sur le nombre d'octets, qui sont nécessaires pour conserver les adresses. Voici mes questions :
- Donc, est-ce à dire que, si nous disons sur système 64 bits, l'adresse aura besoin d'au plus 8 octets?
- Si nous sommes sur 16 bits système et les pointeurs de prendre 2 octets, et de répondre aux besoins de plus de 2 octets pour être placé puis ce qui se passe?
- Double de stackoverflow.com/questions/1473935/...
- Je devine que c'est une faute de frappe et qu'il voulait dire 64bit en #1
- Leeor Oui je ment 64 bits.
Vous devez vous connecter pour publier un commentaire.
Il n'y pas de réponse; il dépend entièrement de l'architecture, le compilateur de la mise en œuvre, et même le type de l'indicateur lui-même. Les pointeurs de types différents ne sont pas la garantie d'avoir la même taille et/ou de représentation.
Par exemple, supposons qu'une parole adressée à l'architecture, où la plus petite unité adressable de stockage est de 16 bits de large (ou plus large). Chaque mot peut contenir plusieurs
char
valeurs; tous les autres types de prendre un mot complet ou plus. Sur une telle architecture, unchar *
etvoid *
aurait besoin d'un peu plus de bits de décalage dans la parole par rapport à d'autres types de pointeur.Notez également qu'un pointeur de type peut être plus large que le nombre de bits réellement nécessaire pour stocker une adresse. Le Macintosh d'origine est exécuté sur un PROCESSEUR Motorola 68000, qui avait un mot de 32 bits taille, mais seulement 24 bits sur le bus d'adresse. Les types pointeur de 32 bits de large, laissant la partie supérieure de 8 bits inutilisés. Entreprenant MacOS programmeurs en ai profité pour stocker des données à la partie supérieure de l'octet de type pointeur, ce qui rend le plus précieux de 128 KO de RAM. Bien sûr, Motorola a finalement publié un PROCESSEUR à 32 lignes d'adresse (le 68020), c'està-dire que le code devait être réécrit.
Sur le moderne, les produits de bureau et du matériel de serveur (lire: x86), il est raisonnable de supposer que tous les types de pointeur sont de la même taille que le natif de la taille de mot (32 - ou 64-bit), et que tous les types de pointeur avoir la même taille et de la représentation. Juste être conscient que ce n'est pas ont pour être vrai.
La réponse est que cela dépend. Quand on dit qu'un système est en 32 bits, cela pourrait signifier que le natif d'entier de 32 bits de large, que le natif de l'adresse (c'est à dire la taille du pointeur) est de 32 bits, ou les deux.
Sur le dessus de cette, pas tous de l'architecture utilise un plat du modèle de mémoire (voir, par exemple,x86 de segmentation de mémoire). Cela complique encore les choses.
Il est préférable de traiter de la taille du pointeur opaque.
C99 fournit des outils sous la forme de
intptr_t
etuintptr_t
types, qui sont des nombres entiers qui sont garantis pour être assez large pour contenir un pointeur.La taille du pointeur dépend fondamentalement de l'architecture du système dans lequel il est mis en œuvre. Par exemple, la taille d'un pointeur de 32 bits soit 4 octets (32 bits ) et de 8 octets(64 bits ) en 64 bits machines. Le peu de types dans une machine ne sont rien, mais l'adresse de mémoire, qu'il peut contenir. 32 bits machines peuvent tenir
2^32
et 64 bits des machines peut contenir2^64
espaces d'adressage. Donc un pointeur (variable qui pointe vers un emplacement de la mémoire) devrait être en mesure de tout de l'adresse mémoire (2^32 for 32 bit and 2^64 for 64 bit
), que des machines détient.À cause de cette raison, nous voyons la taille d'un pointeur de 4 octets ordinateur 32 bits et 8 octets dans un ordinateur 64 bits.
Répondu en Est la sizeof(certains pointeur) toujours égal à quatre?
Les pointeurs sont utilisés pour stocker l'adresse d'une variable.La largeur de la mémoire d'adresse/emplacement dépend de l'architecture d'un ordinateur.Si l'architecture d'un ordinateur est de 16 bits, cela signifie qu'il est possible d'avoir 2^16 emplacements de mémoire.Donc, pour un pointeur pour être en mesure de stocker n'importe quel emplacement de la mémoire dans cet ordinateur, il devrait être de 16 bits de large,j'.e, 2 octets(8 bits=1 octet). De même, pour 32-bit et 64-bit architecture, nous avons besoin d'avoir des pointeurs avec une taille de 4 octets(32 bits largeur) et de 8 octets(64 bits largeur) respectivement.
Aussi, si un système est de 16 bits, alors il ne peut pas avoir l'adresse de l'emplacement de la taille de plus de 16 bits.
Cela vous indique combien d'octets qu'il faut pour représenter un pointeur sur votre système.
Voici un compilateur drapeau, vous pouvez jouer avec sur sujet:
La première ligne génère un binaire pour un environnement 32 bits, vous donnant 4 octets pointeurs. La deuxième ligne génère un binaire pour un environnement 64 bits, vous donnant de 8 octets pointeurs. Vous pouvez le vérifier en exécutant le programme ci-dessus.
Hypothèse, vous êtes sur un système 64 bits avec GCC. Espérons que cela clarifie un peu les choses.
int
, par exemple, on a besoin seulement d'un pointeur. Que est l'adresse. Merci bien, parce que les OP doivent aussi comprendre que l'on peut avoir des adresses pour une adresse vers une autre adresse, etc.