Wijzer naar laagste adres in geheugen

Mogelijk duplicaat:
   Programma's endianness detecteren in een C ++ -programma

Ik probeer te controleren of ik een klein of groot endian OS gebruik.

int main()
{
    int i = 1; 
    unsigned char b = i; 
    char *c = reinterpret_cast(&i);//line 5

    cout << "Processor identified as: " << endl;

    if (*c == b) 
        cout << "Little endian" << endl;
    else
        cout << "Big endian" << endl;
}

Ik weet niet zeker of het gieten van een int * naar char * aanwijzer in regel 5 gegarandeerd een laagste adres retourneert. Doe ik het goed?

0
U zoekt dit: stackoverflow.com/ vragen/1001307/& hellip; geen behoefte aan verwijzingen hier
toegevoegd de auteur David Heffernan, de bron
Lijkt erg op de laatste voor mij.
toegevoegd de auteur David Heffernan, de bron
Mijn vraag gaat over int to char * niet "Hoe endianness te controleren?"
toegevoegd de auteur user103214, de bron

3 antwoord

Je char zal hetzelfde adres hebben als je int, wat het laagste adres is van elke byte in de int. Ik weet niet of dit daadwerkelijk is gegarandeerd, maar het is waar op elk systeem dat ik ooit heb gebruikt.

0
toegevoegd

Het geeft je misschien het onderste adres van de call stack (van de rode draad).

Maar heap-adressen kunnen lager (of hoger) met dat adres vergelijken.

De groeirichting van de stapel is ook orthogonoaal tot endianess.

0
toegevoegd
Dit is niet logisch als een antwoord, herlees de vraag maar vraagt ​​in feite of de herinterpretatie gegarandeerd het laagste adres van de variabele retourneert.
toegevoegd de auteur David Rodríguez - dribeas, de bron

De C ++ -standaard stelt geen beperkingen aan de bytecontent van een geheel getal. Misschien vindt u sommige systemen niet klein of groot-endiaans - de PDP-11 gebruikte bijvoorbeeld een indeling waarin 0x0A0B0C0D was opgeslagen als 0B 0A 0D 0C . Het is ook toegestaan ​​dat er helemaal geen 0x01 byte is in de weergave voor 1 .

Met betrekking tot de vraag of de cast de laagste byte in de int zal terugbrengen, zal het gebeuren. Echter, nogmaals, de inhoud van deze byte is niet goed gedefinieerd door de C ++ -specificatie.

0
toegevoegd
Niet verwant, de vraag is of de herinterpret-cast de eerste byte van het gehele getal zal ophalen, niet over endianness ingeneral
toegevoegd de auteur David Rodríguez - dribeas, de bron