Hoe groot is een aanwijzer?

Is de grootte van een aanwijzer gelijk aan de grootte van het type waarnaar deze verwijst, of hebben aanwijzers altijd een vaste grootte? Bijvoorbeeld…

int x = 10;
int * xPtr = &x;
char y = 'a';
char * yPtr = &y;
std::cout << sizeof(x) << "\n";
std::cout << sizeof(xPtr) << "\n";
std::cout << sizeof(y) << "\n";
std::cout << sizeof(yPtr) << "\n";

Wat zou de output hiervan zijn? Zou sizeof(xPtr)4 en sizeof(yPtr)1 teruggeven, of zouden de 2 pointers eigenlijk dezelfde grootte teruggeven? De reden dat ik dit vraag is omdat de pointers een geheugenadres opslaan en niet de waarden van hun respectievelijke opgeslagen adressen.


Antwoord 1, autoriteit 100%

Aanwijzers hebben over het algemeen een vaste grootte, bijvoorbeeld. op een 32-bits uitvoerbaar bestand zijn ze meestal 32-bits. Er zijn enkele uitzonderingen, zoals op oude 16-bits vensters toen je onderscheid moest maken tussen 32-bits pointers en 16-bits… Het is meestal redelijk veilig om aan te nemen dat ze uniform zullen zijn binnen een bepaald uitvoerbaar bestand op moderne desktop-besturingssystemen .

Bewerken: toch zou ik sterk willen waarschuwen om deze veronderstelling niet in je codete maken. Als je iets gaat schrijven dat absoluut een pointer van een bepaalde grootte moet hebben, kun je het maar beter controleren!

Functiewijzers zijn een ander verhaal — zie Jens’ antwoordvoor meer informatie.


Antwoord 2, autoriteit 95%

Functiewijzers kunnen zeer verschillendegroottes hebben, van 4 tot 20 bytes op een X86-machine, afhankelijk van de compiler. Het antwoord is dus NEE – maten kunnen variëren.

Een ander voorbeeld: neem een 8051-programma, het heeft drie geheugenbereiken en heeft dus drie verschillende pointergroottes, van 8 bit, 16bit, 24bit, afhankelijk van waar het doel zich bevindt, ook al is de grootte van het doel altijd hetzelfde ( bijv. char).


Antwoord 3, autoriteit 38%

Op een 32-bits machine is de grootte van de aanwijzer 32 bits (4 bytes), terwijl deze op een 64-bits machine 8 bytes is. Ongeacht naar welk gegevenstype ze verwijzen, ze hebben een vaste grootte.


Antwoord 4, autoriteit 15%

Om je andere vraag te beantwoorden. De grootte van een aanwijzer en de grootte van waar deze naar verwijst, zijn niet gerelateerd. Een goede analogie is om ze te beschouwen als postadressen. De grootte van het adres van een huis heeft geen relatie met de grootte van het huis.


Antwoord 5, autoriteit 10%

Aanwijzers zijn niet altijd even groot op dezelfde architectuur.

Je kunt meer lezen over het concept van “dichtbij”, “veraf” en “enorme” aanwijzers, als een voorbeeld van een geval waarin de grootte van de aanwijzer verschilt…

http://en.wikipedia.org/wiki/Intel_Memory_Model#Pointer_sizes


Antwoord 6, autoriteit 4%

Ze kunnen anders zijn op woord-adresseerbare machines (bijv. Cray PVP-systemen).

De meeste computers zijn tegenwoordig byte-adresseerbare machines, waarbij elk adres verwijst naar een byte geheugen. Daar zijn alle datapointers meestal even groot, namelijk de grootte van een machineadres.

Op woordadresseerbare machines verwijst elk machineadres in plaats daarvan naar een woord dat groter is dan een byte. Hierop moet een (char *) of (void *) pointer naar een byte geheugen zowel een woordadres als een byte-offset binnen het geadresseerde woord bevatten.

http://docs. cray.com/books/004-2179-001/html-004-2179-001/rvc5mrwh.html


Antwoord 7

De grootte van een aanwijzer is de grootte die uw systeem nodig heeft om een uniek geheugenadres te bevatten (aangezien een aanwijzer alleen het adres bevat waarnaar hij verwijst)


Antwoord 8

Onlangs kwam er een geval tegen waarin dit niet waar was: TI C28x-kaarten kunnen een pointergrootte == 1 hebben, aangezien een byte voor die kaarten 16 bits is en de pointergrootte 16 bits. Om de zaken nog verwarrender te maken, hebben ze ook verwijzers die 22-bitszijn. Ik weet niet precies wat de grootte van de verre aanwijzer zou zijn.

Over het algemeen kunnen DSP-kaarten vreemde gehele getallen hebben.

Dus pointergroottes kunnen in 2020 nog steeds raar zijn als je op rare plaatsen zoekt

Other episodes