• [^] # Re: C++ type et performances

    Posté par . En réponse au message pre-realease de battle-rage un jeu de combat a la street fighter.. Évalué à 1.

    Merci de pas t'être énerver face a mes propos, un peu agressif envers toi a mon goût, ce pourquoi je m'excuse.

    J'avoue que je comprends pas trop ton histoire de registres et d'adresses séparés.

    Car selon ce que j'ai appris:

    Un registre peut contenir une adresse (en flash ou plus loin) ou une adresse vers une adresse ?

    Ou bien une valeurs (après l'avoir été chercher a une adresse, si il le faut) et dans ce cas le processeur fait une opération sur 2 registres enfin.

    Mais j'ai bien compris, concernant mon int8_t, que sur une architecture 32 bits il va y avoir du zéro filling pour rester aligner sur 32 bits ce pourquoi un processeur 32 bits est électriquement conçus (avec des transistors groupé en registre) pour rester aligner sur 4 octets.

    Donc l'accès a un int8_t est pareil sinon plus longue que un int.

    Tout cela a cause de l'alignement sur 32 bits.

    Si j'ai tout bien compris ?


    Alors que pense tu de mon utopie qui suit:

    Un registre 64 bits de base ressemble a cela pour moi:

    +---------------------------------------+
    | RAX | 
    +-------------------+-------------------+
    | EAX | |
    +----+----+----+----+----+----+----+----+ 
    | AL | AH | | | | | | |
    +----+----+----+----+----+----+----+----+
    

    Remarquez que l'on peut avoir l'impression que l'on ne peut pas accéder aux parties (cases) de droites vides...

    Faux ! Cela se fait avec un offset si je dis pas de bêtises.


    Alors pour revenir a nos int8_t et uint8_t.

    Si le compilateur remplis chaque case du RAX (AL, AH, et les suivantes sans noms) avec une valeur uint8_t ou int8_t

    C'est parfaitement aligné !

    D'ailleurs je pense c'est que ferai un programmeur assembleur si il a besoin de 8 octets séparé (uint8_t ou int8_t).

    Mais tu parlait en terme d'adresses et là je ne sais pas grand chose a part la taille (4 octets en 32 et 64 bits).

    Et ce que j'ai dit auparavant concernant l'accès aux valeurs a différentes adresses.

    Mais cela se termine avec des valeurs dans les registres.

    :note: Désolé si j'ai dit des bêtises, je ne suis pas grand expert.


    :footer: Cela est un peu flou pour moi qu n'a pas fait des études d'ingénieurs sur le sujet et qui doit se faire image avec quelques bouquins et tutoriels.

    Merci pour ce que tu m'a appris, le peu que j'ai pût en comprendre.


    PS: Tu parle souvent d'architecture 32 bits mais je pense que de nos jours c'est le 64 bits qui domine, faudrait peut-être faire une petite mise a jours concernant la nouvelle architecture 64 bits, pour mettre a jour ton grand savoir.

    Et sache que j'ai énormément de respect envers toi, car tu en sais des choses, tu les expliques bien, et tu reste cool quand je devient nerveux.