IdentifiantMot de passe
Loading...
Mot de passe oubli� ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les r�ponses en temps r�el, voter pour les messages, poser vos propres questions et recevoir la newsletter

C++ Discussion :

Padding et optimisation


Sujet :

C++

  1. #1
    Membre Expert Avatar de Astraya
    Homme Profil pro
    Consommateur de caf�
    Inscrit en
    Mai 2007
    Messages
    1 048
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 39
    Localisation : France

    Informations professionnelles :
    Activit� : Consommateur de caf�
    Secteur : High Tech - Multim�dia et Internet

    Informations forums :
    Inscription : Mai 2007
    Messages : 1 048
    Par d�faut Padding et optimisation
    Bonjour � tous,

    Je me penchais sur ce qu'on appel le padding. J'aurais aim� savoir si cette affirmation �tait vrai et si elle l'ai, pourquoi 128bytes? est-ce la taille d'un bus afin d'optimiser les transferts de donn�es?

    Arrange the member variables of classes and structures in such a way that the most used variables are in the first 128 bytes, and then sorted from the longest object to the shortest.
    Voila, je vous remercie.
    Avez vous sinon des sources expliquant ceci avec des exemples c++?

    Merci

  2. #2
    Membre �m�rite Avatar de MatRem
    Profil pro
    Inscrit en
    D�cembre 2002
    Messages
    750
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : D�cembre 2002
    Messages : 750
    Par d�faut
    C'est marrant d'utiliser un axiome de la sorte surtout en l'argumentant avec �a :
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    On some processors, the addressing of a member is more efficient if its distance from the beginning of the structure is less than 128 bytes.
    Pour combien de processeurs (lesquels serait int�ressant) est ce vrai.
    Et est ce qu'il existe des processeurs pour lequel c'est faux ? .


    Pour faire ce genre d'optimization, � mon avis, il faut un peu connaitre le mat�riel sur lequel le code va tourner.

  3. #3
    Membre Expert
    Avatar de Joel F
    Homme Profil pro
    Chercheur en informatique
    Inscrit en
    Septembre 2002
    Messages
    918
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 45
    Localisation : France, Essonne (�le de France)

    Informations professionnelles :
    Activit� : Chercheur en informatique
    Secteur : Service public

    Informations forums :
    Inscription : Septembre 2002
    Messages : 918
    Par d�faut
    Ca sent le caca. Ce qui reste vrai c'ets qu'il faut jouer sur le padding des membres pour eviter des trous qui font gonfler outrageusement le sizeof de l'objet.

  4. #4
    Expert confirm�

    Inscrit en
    Novembre 2005
    Messages
    5 145
    D�tails du profil
    Informations forums :
    Inscription : Novembre 2005
    Messages : 5 145
    Par d�faut
    Citation Envoy� par Astraya Voir le message
    Je me penchais sur ce qu'on appel le padding
    C'est l'introduction d'un espace inutilis� entre deux champs. La raison est qu'il est plus efficace d'acc�der � des donn�es align�es (c�d dont l'adresse modulo la taille est 0) et sur certains processeurs il faut g�n�rer du code sp�cial sinon on se prend une interruption.

    Avez vous sinon des sources expliquant ceci avec des exemples c++?
    Pour l'alignement
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
     
    struct NA { char c1; double d; char c2; int i };
    struct AL { double d; int i; char c1; char c2 };
    AL n'a vraisemblablement pas de padding entre les membres et 2 bytes de padding � la fin.
    NA a vraisemblablement 7 bytes de padding entre c1 et d et 3 bytes de padding entre c2 et i mais pas de padding � la fin.
    J'aurais aim� savoir si cette affirmation �tait vrai et si elle l'ai, pourquoi 128bytes?

    Citation Envoy� par MatRem Voir le message
    C'est marrant d'utiliser un axiome de la sorte surtout en l'argumentant avec �a :
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    On some processors, the addressing of a member is more efficient if its distance from the beginning of the structure is less than 128 bytes.
    Pour combien de processeurs (lesquels serait int�ressant) est ce vrai.
    Et est ce qu'il existe des processeurs pour lequel c'est faux ? .
    Il y a au moins deux aspects pouvant �tre � l'origine de cette recommandation:
    - mettre ensemble les donn�es souvent utilis�es ensemble de sorte qu'elle se retrouve sur la m�me ligne de cache -- ce qui suppose qu'elles soient correctement align�e par rapport � la taille d'une ligne de cache -- permet � la fois de s'assurer que l'acc�s � la premi�re chargera les autres dans le cache. Ca diminue aussi la pression sur le cache en �vitant de mettre dans celui-ci des donn�es inutiles. C'est vraisemblablement la cause des am�liorations qu'on pourrait observer en appliquant le conseil sur des processeurs modernes.
    - l'acc�s � des membres de structure se fait avec des instructions adressant la m�moire sous forme adresse de base dans un registre + d�placement � partir de cette adresse. Certains processeurs ont plusieurs codages pour le d�placement suivant la taille de celui-ci. Ne pas utiliser un encodage plus long du d�placement ou surtout ne pas devoir faire le calcul parce qu'il n'y a pas moyen d'encoder le d�placement peut aussi offrir un avantage en rapidit� d'ex�cution. Le 127 provient vraisemblablement d'un processeur permettant de coder le d�placement sur un octet interpr�t� comme un entier sign� (x86 est un candidat). Je ne suis pas s�r que l'effet soit important sur des processeurs modernes, mais sur un 8086 ou un 8086 sur lequel le temps d'ex�cution est quasiment proportionnel au temps d'acc�s � la m�moire pour r�cup�rer le programme et les donn�es, l'effet a pu �tre important.

    Pour faire ce genre d'optimization, � mon avis, il faut un peu connaitre le mat�riel sur lequel le code va tourner.
    Garder ensemble ce qui est utilis� ensemble, s�parer ce qui n'est pas utilis� ensemble -- encore plus si �a peut �tre utilis� simultan�ment par des threads diff�rentes -- c'est utile en g�n�ral. Les d�tails permettant de savoir ce qu'est "ensemble" ou "s�par�", �a va d�pendre effectivement pas mal du mat�riel.

  5. #5
    Membre Expert Avatar de Astraya
    Homme Profil pro
    Consommateur de caf�
    Inscrit en
    Mai 2007
    Messages
    1 048
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 39
    Localisation : France

    Informations professionnelles :
    Activit� : Consommateur de caf�
    Secteur : High Tech - Multim�dia et Internet

    Informations forums :
    Inscription : Mai 2007
    Messages : 1 048
    Par d�faut
    Merci pour vos r�ponses.

    Je ne sais pas trop ce que fait le compilo ou le processeur lorsque qu'il vas utiliser les structures d'exemples de Jean-Marc Bourguet
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    struct NA { char c1; double d; char c2; int i }; 
    struct AL { double d; int i; char c1; char c2 };
    Ce que je ne comprend pas, sur NA, c'est pourquoi 7 bytes entre c1 et d? pkoi pas 3?
    Et pourquoi il met 3 bytes apr�s c2 et pas c1,c2 puis 3 bytes?En analysant j'ai l'impression qu'il remplit des blocs de 8 bytes? pourquoi pas 4?

    Merci

  6. #6
    Membre Expert
    Avatar de Joel F
    Homme Profil pro
    Chercheur en informatique
    Inscrit en
    Septembre 2002
    Messages
    918
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 45
    Localisation : France, Essonne (�le de France)

    Informations professionnelles :
    Activit� : Chercheur en informatique
    Secteur : Service public

    Informations forums :
    Inscription : Septembre 2002
    Messages : 918
    Par d�faut
    Chaque membre doit avoir une addresse align�e sur la taille de son type.

  7. #7
    Expert �minent
    Avatar de koala01
    Homme Profil pro
    aucun
    Inscrit en
    Octobre 2004
    Messages
    11 644
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 53
    Localisation : Belgique

    Informations professionnelles :
    Activit� : aucun

    Informations forums :
    Inscription : Octobre 2004
    Messages : 11 644
    Par d�faut
    Salut,
    Citation Envoy� par Astraya Voir le message
    Merci pour vos r�ponses.

    Je ne sais pas trop ce que fait le compilo ou le processeur lorsque qu'il vas utiliser les structures d'exemples de Jean-Marc Bourguet
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    struct NA { char c1; double d; char c2; int i }; 
    struct AL { double d; int[ i; char c1; char c2 };
    Ce que je ne comprend pas, sur NA, c'est pourquoi 7 bytes entre c1 et d? pkoi pas 3?
    Et pourquoi il met 3 bytes apr�s c2 et pas c1,c2 puis 3 bytes?
    En analysant j'ai l'impression qu'il remplit des blocs de 8 bytes? pourquoi pas 4?

    Merci
    Les adresses m�moires repr�sentent des �l�ments d'une taille suffisante pour remplir les diff�rents acumulateurs du processeur.

    On ne peut en effet pas courir le risque de voir les donn�es qui sont repr�senter aux diff�rentes adresses se "chevaucher"

    Il est donc "logique", lorsque toute l'architecture est en 64 bits, que le padding se fasse... sur 64 bits
    A m�diter: La solution la plus simple est toujours la moins compliqu�e
    Ce qui se con�oit bien s'�nonce clairement, et les mots pour le dire vous viennent ais�ment. Nicolas Boileau
    Compiler Gcc sous windows avec MinGW
    Coder efficacement en C++ : dans les bacs le 17 f�vrier 2014
    mon tout nouveau blog

  8. #8
    Expert confirm�

    Inscrit en
    Novembre 2005
    Messages
    5 145
    D�tails du profil
    Informations forums :
    Inscription : Novembre 2005
    Messages : 5 145
    Par d�faut
    Citation Envoy� par Astraya Voir le message
    Merci pour vos r�ponses.

    Je ne sais pas trop ce que fait le compilo ou le processeur lorsque qu'il vas utiliser les structures d'exemples de Jean-Marc Bourguet
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    struct NA { char c1; double d; char c2; int i }; 
    struct AL { double d; int i; char c1; char c2 };
    Ce que je ne comprend pas, sur NA, c'est pourquoi 7 bytes entre c1 et d? pkoi pas 3?
    Et pourquoi il met 3 bytes apr�s c2 et pas c1,c2 puis 3 bytes?
    En analysant j'ai l'impression qu'il remplit des blocs de 8 bytes? pourquoi pas 4?
    En C et en C++, le compilateur ne peut pas reordonner les champs lui-meme (en C++, il peut reordonner les sections entre private:, protected: et public: mais pas les champs a l'interieur d'une section, je n'ai pas connaissance d'un compilateur qui le fasse).

    J'ai pris l'hypothese (qui est le cas de quasiment toutes les archi 32 bits) ou l'alignement d'un char est le byte, d'un double est 8 bytes, d'un int 4 bytes. Cad que les adresses doivent etre un multiple de ces valeurs (c'est au moins plus efficace de faire ainsi, parfois c'est impose par le proc qui genere une exception ou fait des choses plus ou moins bizarres -- certains ignorent les bits de poids faibles de l'adresse p.e. -- quand ce n'est pas le cas).

    Donc c1 a l'offset 0.
    d a un offset multiple de 8 superieur a 0, donc c'est 8, laissant 7 bytes inutilises.
    c1 a un offset superieur a 8, donc c'est 9.
    i a un offset multiple de 4, superieur a 9, donc c'est 12 laissant 3 bytes inutilises.

    La taille totale doit etre un multiple de l'alignement le plus fort (8 ici). 16 est bien un multiple donc il n'y a pas de padding a la fin.

  9. #9
    Membre Expert Avatar de Astraya
    Homme Profil pro
    Consommateur de caf�
    Inscrit en
    Mai 2007
    Messages
    1 048
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 39
    Localisation : France

    Informations professionnelles :
    Activit� : Consommateur de caf�
    Secteur : High Tech - Multim�dia et Internet

    Informations forums :
    Inscription : Mai 2007
    Messages : 1 048
    Par d�faut
    Ok je vous remercie pour tout ces d�tails.
    Donc � ce que j'ai pu comprendre, le padding d�pendra de l'architecture 32 ou 64 bits et fera en cons�quence.

    Une derni�re chose, et dite moi si je me trompe, sur 32 bits par exemple, on devras mettre le maximum de donn�es du m�me type pour qu'il puisse les aligner sur un m�me mot m�moire. Donc , sur une architecture 32 bits, nous n'aurons pas de padding, si on d�clare :
    Mais nous aurons 3 bytes de padding avant l'entier i si on d�clare :
    Excuser moi encore, je ne connais pas trop le fonctionnement � ce niveau qui me semble tout m�me tr�s important. Je dispose juste de vague notion lointaine au temps du lyc�e ^^

    Je vous remercie.

  10. #10
    Expert �minent
    Avatar de koala01
    Homme Profil pro
    aucun
    Inscrit en
    Octobre 2004
    Messages
    11 644
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 53
    Localisation : Belgique

    Informations professionnelles :
    Activit� : aucun

    Informations forums :
    Inscription : Octobre 2004
    Messages : 11 644
    Par d�faut
    Citation Envoy� par Jean-Marc.Bourguet Voir le message
    En C et en C++, le compilateur ne peut pas reordonner les champs lui-meme (en C++, il peut reordonner les sections entre private:, protected: et public: mais pas les champs a l'interieur d'une section, je n'ai pas connaissance d'un compilateur qui le fasse).

    J'ai pris l'hypothese (qui est le cas de quasiment toutes les archi 32 bits) ou l'alignement d'un char est le byte, d'un double est 8 bytes, d'un int 4 bytes. Cad que les adresses doivent etre un multiple de ces valeurs (c'est au moins plus efficace de faire ainsi, parfois c'est impose par le proc qui genere une exception ou fait des choses plus ou moins bizarres -- certains ignorent les bits de poids faibles de l'adresse p.e. -- quand ce n'est pas le cas).

    Donc c1 a l'offset 0.
    d a un offset multiple de 8 superieur a 0, donc c'est 8, laissant 7 bytes inutilises.
    c1 a un offset superieur a 8, donc c'est 9.
    i a un offset multiple de 4, superieur a 9, donc c'est 12 laissant 3 bytes inutilises.

    La taille totale doit etre un multiple de l'alignement le plus fort (8 ici). 16 est bien un multiple donc il n'y a pas de padding a la fin.
    En fait, sur un PC 32 bits, le pading est de ... 4 bytes (car, il en faut 4 pour arriver � nos 32 bits )

    Par contre, je n'avais pas r�agi aux 8 bytes essentiellement parce que le pading est, effectivement, de 8 sur les architecture 64 bits, avec application compil�es comme telles
    A m�diter: La solution la plus simple est toujours la moins compliqu�e
    Ce qui se con�oit bien s'�nonce clairement, et les mots pour le dire vous viennent ais�ment. Nicolas Boileau
    Compiler Gcc sous windows avec MinGW
    Coder efficacement en C++ : dans les bacs le 17 f�vrier 2014
    mon tout nouveau blog

  11. #11
    Membre Expert Avatar de Astraya
    Homme Profil pro
    Consommateur de caf�
    Inscrit en
    Mai 2007
    Messages
    1 048
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 39
    Localisation : France

    Informations professionnelles :
    Activit� : Consommateur de caf�
    Secteur : High Tech - Multim�dia et Internet

    Informations forums :
    Inscription : Mai 2007
    Messages : 1 048
    Par d�faut
    Ok merci beaucoup tout le monde.

    Il pourrait �tre int�ressant de mettre des informations sur le padding dans un faq ou tutoriel d'optimisation en c++. Ainsi que divers autres techniques b�te mais auxquelles on ne porte pas forcement attention sans exp�rience.

  12. #12
    Expert confirm�

    Inscrit en
    Novembre 2005
    Messages
    5 145
    D�tails du profil
    Informations forums :
    Inscription : Novembre 2005
    Messages : 5 145
    Par d�faut
    Citation Envoy� par koala01 Voir le message
    En fait, sur un PC 32 bits, le pading est de ... 4 bytes (car, il en faut 4 pour arriver � nos 32 bits )
    La taille sans padding fait 16 bytes, il n'y a pas besoin de padding a la fin.

    Par contre, je n'avais pas r�agi aux 8 bytes essentiellement parce que le pading est, effectivement, de 8 sur les architecture 64 bits, avec application compil�es comme telles
    Je ne comprends pas ce que tu as ecrit. Si tu as mis padding pour alignement, tu oublies que l'alignement depend des donnees. De plus en C et en C++, il n'est pas possible d'avoir comme alignement autre chose qu'un diviseur de la taille. Or sur la plupart des implementations 64 bits, les int font quand meme 32 bits; ils seront donc alignes sur 32 bits.

  13. #13
    Membre �m�rite Avatar de MatRem
    Profil pro
    Inscrit en
    D�cembre 2002
    Messages
    750
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : D�cembre 2002
    Messages : 750
    Par d�faut
    Un petit article � propos de l'alignement et du padding :
    http://virtrev.blogspot.com/2010/09/...-examples.html

  14. #14
    Membre Expert Avatar de Astraya
    Homme Profil pro
    Consommateur de caf�
    Inscrit en
    Mai 2007
    Messages
    1 048
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 39
    Localisation : France

    Informations professionnelles :
    Activit� : Consommateur de caf�
    Secteur : High Tech - Multim�dia et Internet

    Informations forums :
    Inscription : Mai 2007
    Messages : 1 048
    Par d�faut
    Je reviens avec un peu de code de test que voici:
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    #include <iostream>
    #include <conio.h>
     
    using std::cout;
    using std::endl;
     
    struct SWorst // 24 bytes
    {
        int i;    //4 bytes
        char c;   //1 bytes + 3 bytes for padding
        double d; //8 bytes
        char c2;  //1 bytes + 7 bytes for padding
    };
     
    struct SBest //16 bytes
    {
        double d; //8bytes
        int i;    //4 bytes
        char c;   //1 bytes
        char c2;  //1 bytes + 2 bytes for padding
    };
     
    struct BadSWorstAndSBest //64 bytes
    {
        char c; // 1 bytes + 7 bytes for padding
        SWorst sw; // 24 bytes
        char c1; // 1 bytes + 7 bytes for padding
        SBest sb; //16 bytes
        char c2; //1 bytes + 7 bytes for padding
    };
     
    struct GoodSWorstAndSBest //48 bytes
    {
     
        SWorst sw; // 24 bytes
        SBest sb;  // 16 bytes
        char c;    // 1 bytes 
        char c1;   // 1 bytes 
        char c2;   // 1 bytes + 5 bytes for padding
     
    };
     
     
    int main()
    {
        cout << " SWorst " << sizeof(SWorst) << endl;
        cout << " SBest " << sizeof(SBest) << endl;
        cout << " BadSWorstAndSBest " << sizeof(BadSWorstAndSBest) << endl;
        cout << " GoodSWorstAndSBest " << sizeof(GoodSWorstAndSBest) << endl;
     
        _getch();
    }
    Donc jusque la j'ai compris le principe sauf une chose.
    Apparemment, un int suivit d'un char est mis sur le m�me mot m�moire, mais ce ne sont pas les m�me types. Une explication � �a? Existe-t-il une "hi�rarchie" au niveau des types disant que un char pourrais �tre un int mais pas l'inverse?
    A moins que j'ai fait un erreur au niveau du padding.

    Merci

  15. #15
    Expert confirm�

    Inscrit en
    Novembre 2005
    Messages
    5 145
    D�tails du profil
    Informations forums :
    Inscription : Novembre 2005
    Messages : 5 145
    Par d�faut
    Il n'y a pas une notion de mot memoire tres forte sur un x86. Ce qui compte c'est que les adresses soient des multiples de l'alignement (et celui-ci c'est la taille pour les types de bases, long double sur 10 bytes excepte).

  16. #16
    Membre Expert Avatar de Astraya
    Homme Profil pro
    Consommateur de caf�
    Inscrit en
    Mai 2007
    Messages
    1 048
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 39
    Localisation : France

    Informations professionnelles :
    Activit� : Consommateur de caf�
    Secteur : High Tech - Multim�dia et Internet

    Informations forums :
    Inscription : Mai 2007
    Messages : 1 048
    Par d�faut
    Ok merci, ceci explique que la struct suivante soit de 16 bytes.
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    7
    struct Test
    {
        double d;
        int i;
        short s;
        char c[2];
    };
    Merci beaucoup pour ces explications fortes utiles!

  17. #17
    Membre chevronn�

    Inscrit en
    Ao�t 2007
    Messages
    300
    D�tails du profil
    Informations forums :
    Inscription : Ao�t 2007
    Messages : 300
    Par d�faut
    Les r�gles d'alignement peuvent varier l�g�rement entre membres d'une m�me famille de circuits (par exemple, pour les microprocesseurs, on doit souvent aligner les donn�es sur des multiples exacts de leur taille, avec pour certains des relaxations de contraintes si on accepte de la latence, comme les modes segment�s des anciens x86).

    En revanche, entre familles d'appareils, on peut avoir de grosses surprises. Par exemple, il existe des processeurs qui n'acceptent que des alignements fixes de 256 bits. Si on veut lire un caract�re, on lit 32 octets de toute fa�on. Parfois, on n'a m�me pas de m�moire r�ellement pr�sente sur la fin. Par exemple sur un projet r�cent, nous avions deux banques de 960 bits r�els, d�cal�s de 1024 bits, et align�s tous les 2048 (disposition classique en full HD). Quand on programme pour ce genre de syst�me embarqu�, on doit pas mal changer ses habitudes, mais c'est clairement document� et bien connu.

    Ce qui l'est moins, et peut poser des probl�mes, c'est quand on doit transf�rer des donn�es sur un bus. Si le protocole est con�u par un programmeur ayant grandi sur PC, on est s�r de se prendre t�t ou tard de la latence pour de mauvaises raisons.

    Pour en revenir au conseil initial, c'est une tr�s bonne base. Mais il ne faut pas trop s'inqui�ter et aller plus loin: les syst�mes pour lesquels l'alignement est significativement diff�rent de ceux des microprocesseurs sont souvent tr�s sp�cialis�s, et la question ne se pose pas vraiment en termes de types C++ (float, int64 etc.), mais plut�t en termes d'interface VHDL. Apr�s 26 ans de carri�re en informatique embarqu�e, je ne connais pas d'exemple de processeur capable de traiter nativement un nombre � virgule flottante et en m�me temps n�cessitant des alignements sup�rieurs � 64 bits (�a ne veut pas dire qu'il n'y en a pas, mais que si un jour vous en rencontrez un, vous pouvez �tre s�r que la doc va allouer 25 pages en rouge rien que sur ce probl�me).

  18. #18
    Mod�rateur
    Avatar de Obsidian
    Homme Profil pro
    Chercheur d'emploi
    Inscrit en
    Septembre 2007
    Messages
    7 487
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 49
    Localisation : France, Essonne (�le de France)

    Informations professionnelles :
    Activit� : Chercheur d'emploi
    Secteur : High Tech - �diteur de logiciels

    Informations forums :
    Inscription : Septembre 2007
    Messages : 7 487
    Par d�faut
    Bonsoir,

    Citation Envoy� par Astraya
    Je me penchais sur ce qu'on appel le padding. J'aurais aim� savoir si cette affirmation �tait vrai et si elle l'ai, pourquoi 128bytes? est-ce la taille d'un bus afin d'optimiser les transferts de donn�es?
    Non, � padding � est un terme g�n�ral et l'affirmation en question d�pend beaucoup du compilateur dont la doc contient l'info que tu as extraite. On peut savoir sur quelle machine tu travailles ?

    Citation Envoy� par MatRem Voir le message
    Pour combien de processeurs (lesquels serait int�ressant) est ce vrai. Et est ce qu'il existe des processeurs pour lequel c'est faux ? . Pour faire ce genre d'optimization, � mon avis, il faut un peu connaitre le mat�riel sur lequel le code va tourner.
    �a doit �tre inutile dans la plupart des cas mais, sur 6809 par exemple, l'adressage se faisait sur 16 bits, mais il existait un mode d'adressage sp�cial (dit � direct �) dans lequel on pla�ait les 8 bits de poids fort dans un registre sp�cial (� DP : Direct Page �) pour ne passer ensuite que l'octet de poids faible de l'adresse � pointer dans le code op�ration.

    Sur un 8 bits, on stockait beaucoup de choses en 256 octets. La quasi-totalit� des variables de fonctionnement du BASIC 512 de mon TO8D y tenait, et �a permettait de gagner entre 15 et 30% d'espace dans la ROM du logiciel, ce qui n'�tait pas n�gligeable. L'interpr�teur et tout le backend syst�me, puisque le BASIC servait souvent d'OS sur ces machines tenait dans 2�16Kio. Autant dire que le tout y �tait rentr� au chausse-pied.

    Donc, ce genre de consid�ration doit encore �tre vrai sur les micro-contr�leurs. Maintenant, il n'y a pas de raison a priori que ce soit 128 octets en particulier. �a d�pend effectivement de la puce que tu utilises.

  19. #19
    Membre Expert Avatar de Astraya
    Homme Profil pro
    Consommateur de caf�
    Inscrit en
    Mai 2007
    Messages
    1 048
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 39
    Localisation : France

    Informations professionnelles :
    Activit� : Consommateur de caf�
    Secteur : High Tech - Multim�dia et Internet

    Informations forums :
    Inscription : Mai 2007
    Messages : 1 048
    Par d�faut
    Non, � padding � est un terme g�n�ral et l'affirmation en question d�pend beaucoup du compilateur dont la doc contient l'info que tu as extraite. On peut savoir sur quelle machine tu travailles ?
    Un dell inspiron core 2 duo, Windows 7 64bits. La compilation est sous visual studio 2010x64 en 32 bits et non 64.

+ R�pondre � la discussion
Cette discussion est r�solue.

Discussions similaires

  1. Structures, padding, optimisations
    Par oodini dans le forum C++
    R�ponses: 5
    Dernier message: 08/03/2013, 11h54
  2. Optimisation de votre SGBDR et de vos requ�tes...
    Par SQLpro dans le forum Langage SQL
    R�ponses: 35
    Dernier message: 11/01/2013, 11h49
  3. [VB6] [BDD] Optimisation de l'accès aux données
    Par LadyArwen dans le forum VB 6 et ant�rieur
    R�ponses: 8
    Dernier message: 30/01/2003, 13h27
  4. [langage]Problème de temps de lecture, optimisation
    Par And_the_problem_is dans le forum Langage
    R�ponses: 2
    Dernier message: 08/01/2003, 08h47
  5. [langage] Optimiser la lecture d'un fichier
    Par And_the_problem_is dans le forum Langage
    R�ponses: 2
    Dernier message: 11/06/2002, 10h24

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo