Est-ce qu'il t'a, une seconde, effleuré l'esprit que si on a un
alignement de 4, un sizeof de 10, les accès aux éléments d'un tableau
ne sont pas alignés ?
Est-ce qu'il t'a, une seconde, effleuré l'esprit que si on a un
alignement de 4, un sizeof de 10, les accès aux éléments d'un tableau
ne sont pas alignés ?
Est-ce qu'il t'a, une seconde, effleuré l'esprit que si on a un
alignement de 4, un sizeof de 10, les accès aux éléments d'un tableau
ne sont pas alignés ?
James Kanze writes:
[...]
| > | Je constate que sous Linux, g++ a effectivement choisi une
| > | taille de 12 pour long double, c-à-d qu'il enforce un
| > | alignement de 4. Je ne connais pas les raisons de ce choix,
| > As-tu pensé, une seconde, que GCC *ne fait qu'implémenter* l'ABI
| > définit pour la plateforme cible ?
| Je n'accuse personne. Je sais que les raisons derrière tel ou tel
| choix peuvent être légion. Tout ce que je dis, c'est que c'est un
| chois qui n'a pas de sens *pour* *les* *hardware* *modernes* -- il
| pourrait bien se justifer pour les 80386, par exemple.
1) Je n'ai vu personne dire que tu accusais quelqu'un.
2) Tu n'expliques toujours pas pourquoi le choix 10 est meilleur
que 12 sachant que l'alignement naturel est 4.
Il me paraît évident que si on considère qu'on peut avoir des
tableaux de long double -- ce qui n'est pas exactement une
stupide idée -- alors un sizeof de 10 n'est pas meilleur 13,
alors que 12 présente nettement un avantage indéniables : tous
les élements du tableau sont alignés.
| N'oublie pas le contexte de la discussion, non plus.
Mais je n'oublie pas le contexte de la discussion. Bien au contraire.
Quand tu affirmes sans sourciller « il n'y a aucune justification
technique », alors il me semble que tu as perdu contact avec la
réalité. N'essaie pas de distraire plus.
Ah, au fait, un double dans une structure n'a pas un alignement 8,
c'est plutôt 4.
Et aussi, les flottants sont convertis en *hardware* en format 80
bits, ce qui fait pluls que 8 bytes sur cette machine.
James Kanze <kanze@none> writes:
[...]
| > | Je constate que sous Linux, g++ a effectivement choisi une
| > | taille de 12 pour long double, c-à-d qu'il enforce un
| > | alignement de 4. Je ne connais pas les raisons de ce choix,
| > As-tu pensé, une seconde, que GCC *ne fait qu'implémenter* l'ABI
| > définit pour la plateforme cible ?
| Je n'accuse personne. Je sais que les raisons derrière tel ou tel
| choix peuvent être légion. Tout ce que je dis, c'est que c'est un
| chois qui n'a pas de sens *pour* *les* *hardware* *modernes* -- il
| pourrait bien se justifer pour les 80386, par exemple.
1) Je n'ai vu personne dire que tu accusais quelqu'un.
2) Tu n'expliques toujours pas pourquoi le choix 10 est meilleur
que 12 sachant que l'alignement naturel est 4.
Il me paraît évident que si on considère qu'on peut avoir des
tableaux de long double -- ce qui n'est pas exactement une
stupide idée -- alors un sizeof de 10 n'est pas meilleur 13,
alors que 12 présente nettement un avantage indéniables : tous
les élements du tableau sont alignés.
| N'oublie pas le contexte de la discussion, non plus.
Mais je n'oublie pas le contexte de la discussion. Bien au contraire.
Quand tu affirmes sans sourciller « il n'y a aucune justification
technique », alors il me semble que tu as perdu contact avec la
réalité. N'essaie pas de distraire plus.
Ah, au fait, un double dans une structure n'a pas un alignement 8,
c'est plutôt 4.
Et aussi, les flottants sont convertis en *hardware* en format 80
bits, ce qui fait pluls que 8 bytes sur cette machine.
James Kanze writes:
[...]
| > | Je constate que sous Linux, g++ a effectivement choisi une
| > | taille de 12 pour long double, c-à-d qu'il enforce un
| > | alignement de 4. Je ne connais pas les raisons de ce choix,
| > As-tu pensé, une seconde, que GCC *ne fait qu'implémenter* l'ABI
| > définit pour la plateforme cible ?
| Je n'accuse personne. Je sais que les raisons derrière tel ou tel
| choix peuvent être légion. Tout ce que je dis, c'est que c'est un
| chois qui n'a pas de sens *pour* *les* *hardware* *modernes* -- il
| pourrait bien se justifer pour les 80386, par exemple.
1) Je n'ai vu personne dire que tu accusais quelqu'un.
2) Tu n'expliques toujours pas pourquoi le choix 10 est meilleur
que 12 sachant que l'alignement naturel est 4.
Il me paraît évident que si on considère qu'on peut avoir des
tableaux de long double -- ce qui n'est pas exactement une
stupide idée -- alors un sizeof de 10 n'est pas meilleur 13,
alors que 12 présente nettement un avantage indéniables : tous
les élements du tableau sont alignés.
| N'oublie pas le contexte de la discussion, non plus.
Mais je n'oublie pas le contexte de la discussion. Bien au contraire.
Quand tu affirmes sans sourciller « il n'y a aucune justification
technique », alors il me semble que tu as perdu contact avec la
réalité. N'essaie pas de distraire plus.
Ah, au fait, un double dans une structure n'a pas un alignement 8,
c'est plutôt 4.
Et aussi, les flottants sont convertis en *hardware* en format 80
bits, ce qui fait pluls que 8 bytes sur cette machine.
Gabriel Dos Reis wrote:
Est-ce qu'il t'a, une seconde, effleuré l'esprit que si on a un
alignement de 4, un sizeof de 10, les accès aux éléments d'un tableau
ne sont pas alignés ?
Sur un bus de données de 32 bits, un mot de 10 octets peut être accédé
en 3 cycles, qu'il soit aligné sur une adresse multiple de 4 (1er et
2ème cycle: 4 octets, 3ème cycle 2 octets) ou sur une adresse multiple
de 4 plus 2 (1er cycle 2 octets, 2ème et 3ème cycle 4 octets). Les
Intel x86 (x>=3) ne font-ils pas ainsi pour accéder des "long double"
?
Gabriel Dos Reis wrote:
Est-ce qu'il t'a, une seconde, effleuré l'esprit que si on a un
alignement de 4, un sizeof de 10, les accès aux éléments d'un tableau
ne sont pas alignés ?
Sur un bus de données de 32 bits, un mot de 10 octets peut être accédé
en 3 cycles, qu'il soit aligné sur une adresse multiple de 4 (1er et
2ème cycle: 4 octets, 3ème cycle 2 octets) ou sur une adresse multiple
de 4 plus 2 (1er cycle 2 octets, 2ème et 3ème cycle 4 octets). Les
Intel x86 (x>=3) ne font-ils pas ainsi pour accéder des "long double"
?
Gabriel Dos Reis wrote:
Est-ce qu'il t'a, une seconde, effleuré l'esprit que si on a un
alignement de 4, un sizeof de 10, les accès aux éléments d'un tableau
ne sont pas alignés ?
Sur un bus de données de 32 bits, un mot de 10 octets peut être accédé
en 3 cycles, qu'il soit aligné sur une adresse multiple de 4 (1er et
2ème cycle: 4 octets, 3ème cycle 2 octets) ou sur une adresse multiple
de 4 plus 2 (1er cycle 2 octets, 2ème et 3ème cycle 4 octets). Les
Intel x86 (x>=3) ne font-ils pas ainsi pour accéder des "long double"
?
James Kanze writes:
| > 2) Tu n'expliques toujours pas pourquoi le choix 10 est meilleur
| > que 12 sachant que l'alignement naturel est 4.
| Évidemment que je ne l'explique pas.
Eh bin, tu devrais.
[...]
| (Mais en rélisant ce que j'ai écrit avant, je constate
| qu'effectivement, j'ai melangé taille et alignement pas mal.
| Alors, je comprends qu'on ne m'a pas bien compris.)
C'est la faute des autres, hein.
[...]
| > Et aussi, les flottants sont convertis en *hardware* en
| > format 80 bits, ce qui fait pluls que 8 bytes sur cette
| > machine.
| Dans les régistres. Le hardware sait adresser des variables
| flottantes de 4, de 8 et de 10 octets en mémoire.
James, cette phrase à laquelle tu réponds parle du *calcul*,
pas juste de l'adressage.
James Kanze <kanze@none> writes:
| > 2) Tu n'expliques toujours pas pourquoi le choix 10 est meilleur
| > que 12 sachant que l'alignement naturel est 4.
| Évidemment que je ne l'explique pas.
Eh bin, tu devrais.
[...]
| (Mais en rélisant ce que j'ai écrit avant, je constate
| qu'effectivement, j'ai melangé taille et alignement pas mal.
| Alors, je comprends qu'on ne m'a pas bien compris.)
C'est la faute des autres, hein.
[...]
| > Et aussi, les flottants sont convertis en *hardware* en
| > format 80 bits, ce qui fait pluls que 8 bytes sur cette
| > machine.
| Dans les régistres. Le hardware sait adresser des variables
| flottantes de 4, de 8 et de 10 octets en mémoire.
James, cette phrase à laquelle tu réponds parle du *calcul*,
pas juste de l'adressage.
James Kanze writes:
| > 2) Tu n'expliques toujours pas pourquoi le choix 10 est meilleur
| > que 12 sachant que l'alignement naturel est 4.
| Évidemment que je ne l'explique pas.
Eh bin, tu devrais.
[...]
| (Mais en rélisant ce que j'ai écrit avant, je constate
| qu'effectivement, j'ai melangé taille et alignement pas mal.
| Alors, je comprends qu'on ne m'a pas bien compris.)
C'est la faute des autres, hein.
[...]
| > Et aussi, les flottants sont convertis en *hardware* en
| > format 80 bits, ce qui fait pluls que 8 bytes sur cette
| > machine.
| Dans les régistres. Le hardware sait adresser des variables
| flottantes de 4, de 8 et de 10 octets en mémoire.
James, cette phrase à laquelle tu réponds parle du *calcul*,
pas juste de l'adressage.