Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

Output

25 réponses
Avatar
Guillaume GOURDIN
Bonjour à tous,

j'ai un problème, le code suivat :

uint8_t data1, data2;
cout << "0x" << hex << setw(4) << setfill('0') << data1 << "=";
cout << "0x" << hex << setw(2) << setfill('0') << data2 << endl;

me sort l'output suivant :

0x00aa=0x0

alors que je m'attendrais (et que je voudrais) quelque chose du genre:

0x00aa=0x00

Vous avez des idées?

5 réponses

1 2 3
Avatar
Michael DOUBEZ
On Mar 11, 10:37 pm, Sylvain wrote:
James Kanze wrote on 11/03/2008 10:51:

un alignement peut être requis pour lire un mot - c'est assez
courant sur les petits procs


Des petits procs, comme les IBM système z, les anciens Crays,
tous les Sparcs... En fait, les seules architectures que moi,
j'ai vues, où on n'avait pas besoin de respecter l'alignement,
c'est l'architecture Intel (probablement parce qu'au départ, il
n'avait que 8 bits).


je pensais en effet à des procs Intel - imposant l'alignement -
comme les PXAnnn.
pardon d'avoir oublié les "0.001% of us" qui utilisent un Cray.


Je vois plus souvent des Sparcs que les PXAnnn (dont j'entends
le nom pour le premier fois), et des Sparcs exigent bien
l'alignement. Mais j'ai cité des mainframes simplemnet parce que
tu as dit petits. En fait, je crois le fait de ne pas exiger
l'alignement est plutôt l'exception -- ça l'était dans la
passée, au moins (IBM RS6000, HP PA, Siemens BS2000, PDP-11,
Interdata 8/32 -- à vrai dire, il ne me viens pas à l'esprit de
l'essayer, puisque quand j'apprenais l'informatique, c'était la
règle).


En embarqué, les MIPS sont connus pour permettre les accès non-alignés
(ils ont même un brevet là dessus, avec une instruction dédiée) et je
crois que maintenant ARM le propose en option.

Michael




Avatar
Jean-Marc Bourguet
Michael DOUBEZ writes:


En embarqué, les MIPS sont connus pour permettre les accès non-alignés
(ils ont même un brevet là dessus, avec une instruction dédiée)


Si c'est ce à quoi je pense, il faut deux lectures puis combiner les
résultats. Donc une génération de code particulière et plus lente aussi
dans le cas normal. Ce n'est pas le processeur qui détecte et fait ce
qu'il faut.

et je crois que maintenant ARM le propose en option.


ARM doit proposer tout ce qu'on veut en option :-) Note que ce doit être
aussi le cas pour les IP de MIPS.

--
Jean-Marc
FAQ de fclc++: http://www.cmla.ens-cachan.fr/~dosreis/C++/FAQ
C++ FAQ Lite en VF: http://www.ifrance.com/jlecomte/c++/c++-faq-lite/index.html
Site de usenet-fr: http://www.usenet-fr.news.eu.org

Avatar
Jean-Marc Bourguet
James Kanze writes:

On 11 mar, 11:10, Jean-Marc Bourguet wrote:
James Kanze writes:


[...]
Des petits procs, comme les IBM système z, les anciens Crays,
tous les Sparcs... En fait, les seules architectures que moi,
j'ai vues, où on n'avait pas besoin de respecter l'alignement,
c'est l'architecture Intel (probablement parce qu'au départ, il
n'avait que 8 bits).


Il me semblait que les machines IBM (que ce soit les
descendant des 360 ou les divers POWER) permettent l'adressage
non aligne a (relativement) faible cout. La raison que
j'avais vu donnee etait que le COBOL en generait pas mal.
Mais je n'ai pas regarde precisement les manuels.


J'avoue que mon expérence avec ce genre de processeur, c'est
plutôt chez les compatibles. Mais le Siemens BS2000 exigeait
bien un alignement de 4 (et peut-être même 8 pour les doubles),
et il se disait 100% compatibles.


J'ai maintenant un autre souvenir pour les POWER: accès non aligné si
restant dans une ligne de cache mais générant une exception si il traverse
une frontière entre deux lignes de cache. Il faudrait repartir dans les
specs pour vérifier.

--
Jean-Marc
FAQ de fclc++: http://www.cmla.ens-cachan.fr/~dosreis/C++/FAQ
C++ FAQ Lite en VF: http://www.ifrance.com/jlecomte/c++/c++-faq-lite/index.html
Site de usenet-fr: http://www.usenet-fr.news.eu.org



Avatar
Michael DOUBEZ
Michael DOUBEZ writes:


En embarqué, les MIPS sont connus pour permettre les accès non-alignés
(ils ont même un brevet là dessus, avec une instruction dédiée)


Si c'est ce à quoi je pense, il faut deux lectures puis combiner les
résultats. Donc une génération de code particulière et plus lente aussi
dans le cas normal. Ce n'est pas le processeur qui détecte et fait ce
qu'il faut.


Oui, c'est le format single-instruction, multiple-data (SIMD) qui est
déposé. Je ne sais pas si c'est le processeur qui fait cela mais c'est
dans le hard; dans le cas de ARM, c'est la MMU.


et je crois que maintenant ARM le propose en option.


ARM doit proposer tout ce qu'on veut en option :-)


C'est comme les voitures; tu achètes une carrosserie qui roule et les
sièges c'est en option :)
Heureusement qu'il n'y a pas de prix d'entrée pour les voitures.

Note que ce doit être
aussi le cas pour les IP de MIPS.



Oui, enfin, l'accès aux données non-alignée est un argument de vente
parfois et mips jouait là dessus il y a quelques années encore.
Maintenant, ce n'est pas important pour tout le monde, surtout si le
code n'a pas de comportement indéfinit comme un reinterpret_cast<>.

Michael


Avatar
James Kanze
Jean-Marc Bourguet wrote:
James Kanze writes:

On 11 mar, 11:10, Jean-Marc Bourguet wrote:
James Kanze writes:


[...]
Des petits procs, comme les IBM système z, les anciens Crays,
tous les Sparcs... En fait, les seules architectures que moi,
j'ai vues, où on n'avait pas besoin de respecter l'alignement,
c'est l'architecture Intel (probablement parce qu'au départ, il
n'avait que 8 bits).


Il me semblait que les machines IBM (que ce soit les
descendant des 360 ou les divers POWER) permettent l'adressage
non aligne a (relativement) faible cout. La raison que
j'avais vu donnee etait que le COBOL en generait pas mal.
Mais je n'ai pas regarde precisement les manuels.


J'avoue que mon expérence avec ce genre de processeur, c'est
plutôt chez les compatibles. Mais le Siemens BS2000 exigeait
bien un alignement de 4 (et peut-être même 8 pour les doubles),
et il se disait 100% compatibles.


J'ai maintenant un autre souvenir pour les POWER: accès non
aligné si restant dans une ligne de cache mais générant une
exception si il traverse une frontière entre deux lignes de
cache. Il faudrait repartir dans les specs pour vérifier.


Et que ça pourrait varier d'un modèle à l'autre, peut-être. Je
sais que j'ai vu des signaux (bus error) suite à des accès
non-alignés, mais ça date (1997 ou 1998, peut-être -- quand
je travaillais chez IBM en Allemagne).

--
James Kanze (GABI Software) email:
Conseils en informatique orientée objet/
Beratung in objektorientierter Datenverarbeitung
9 place Sémard, 78210 St.-Cyr-l'École, France, +33 (0)1 30 23 00 34




1 2 3