• [^] # Re: Ça a l'air stable

    Posté par . En réponse au journal Driver NTFS pour linux avec lecture/ecriture. Évalué à 10.

    L'endianness d'un système définit dans quel ordre sont stockés les octets en mémoire.

    En envisageant la mémoire comme un tableau:

    En little endian, on commence par le poid faible (LSB=least significant byte).
    --------------adresses mémoires -------->
    0xDEADBEEF = EF BE AD DE
    ^ lsb ^ msb

    En big endian, on commence par le poid fort (MSB=most significant byte)
    --------------adresses mémoires -------->
    0xCAFEC0DE = CA FE C0 DE
    ^ msb ^ lsb

    Big endian (ppc, sparc, 68k...) paraît le plus intuitif à première vue, mais le little endian (x86, alpha...) a l'avantage de pouvoir accéder à l'octet de poid faible avec un accès mémoire de taille variable (genre si on a 0x1, en mémoire 01 00 00 00 donc, avec un movb al, $ADRESSE on retrouve bien 1, idem avec un movl eax, $ADRESSE). En big endian ça ne passe pas car le LSB change de place suivant la "largeur" du type utilisé. D'où le fameux test en C:

    int test = 1;
    if ( *(char *) test == 1) {
    /* little endian */
    } else {
    /* big endian */
    }

    Il existe aussi des machines middle endian, des vieux vax je crois, qui utilisent une règle encore un peu plus tordue :)