En lisant la norme C au sujet du comportement des op=E9rateurs de
comparaisons (<, <=3D, > et =3D>), j'ai vu que dans le cas o=F9 deux
pointeurs r=E9f=E9rencent des objets n'appartenant pas au m=EAme agr=E9gat,=
le
comportement est ind=E9termin=E9 (C11 [n1570] =A7 6.5.8 Relational operator=
s
al 5 pp 95-96).
Comparer l'adresse de deux objets ne faisant pas partie du m=EAme
agr=E9gat ne me para=EEt pas avoir beaucoup de sens, mais j'aurais voulu
savoir pourquoi il s'agit d'un comportement ind=E9termin=E9 ? Je veux
dire, techniquement, les pointeurs ne sont g=E9n=E9ralement rien de plus
que des entiers, aussi, en quoi leur comparaison serait-elle
probl=E9matique hormis les cas cit=E9s par la norme ? Existe-t-il des
architectures recourant =E0 des repr=E9sentations pouvant =EAtre
probl=E9matique en cas de comparaison ? Si oui, auriez-vous des
exemples ?
Erreur (utiliser les 8 bits de poids forts de pointeur parce que l'espace memoire est limite a 24 bits) qui a ete faite au moins deux autres fois. Sur les premier Mac et les IBM 360 (la, c'etait grave au point que quand ils ont fait l'extension sur 32 bits -- prevue depuis le debut -- ils n'ont pu utiliser que 31 bits).
Tu as oublié les premières série des Atari ST (ceux à 68000) où les accès aux périphériques (68901 et ay3-8910) pouvaient se faire bien plus rapidement en négligeant les 8 bits de poids fort du bus d'adresse. Bien pratique en asm/superviser, mais diabolique à gérer en C ;)
Et le Basic Microsoft sur amiga... qui ne marche que sur les modeles a base de 68000, parce que lui aussi utilise les 8 bits de poids fort pour autre chose...
In article <50bbaf1c$0$16500$426a74cc@news.free.fr>,
Tonton Th <tth@la.bas.invalid> wrote:
On 08/06/2012 06:05 PM, Jean-Marc Bourguet a dit:
Erreur (utiliser les 8 bits de poids forts de pointeur parce que
l'espace memoire est limite a 24 bits) qui a ete faite au moins deux
autres fois. Sur les premier Mac et les IBM 360 (la, c'etait grave au
point que quand ils ont fait l'extension sur 32 bits -- prevue depuis le
debut -- ils n'ont pu utiliser que 31 bits).
Tu as oublié les premières série des Atari ST (ceux à 68000) où
les accès aux périphériques (68901 et ay3-8910) pouvaient se faire
bien plus rapidement en négligeant les 8 bits de poids fort du
bus d'adresse. Bien pratique en asm/superviser, mais diabolique
à gérer en C ;)
Et le Basic Microsoft sur amiga... qui ne marche que sur les modeles
a base de 68000, parce que lui aussi utilise les 8 bits de poids fort
pour autre chose...
Erreur (utiliser les 8 bits de poids forts de pointeur parce que l'espace memoire est limite a 24 bits) qui a ete faite au moins deux autres fois. Sur les premier Mac et les IBM 360 (la, c'etait grave au point que quand ils ont fait l'extension sur 32 bits -- prevue depuis le debut -- ils n'ont pu utiliser que 31 bits).
Tu as oublié les premières série des Atari ST (ceux à 68000) où les accès aux périphériques (68901 et ay3-8910) pouvaient se faire bien plus rapidement en négligeant les 8 bits de poids fort du bus d'adresse. Bien pratique en asm/superviser, mais diabolique à gérer en C ;)
Et le Basic Microsoft sur amiga... qui ne marche que sur les modeles a base de 68000, parce que lui aussi utilise les 8 bits de poids fort pour autre chose...
Alexandre Bacquart
On 12/02/2012 08:42 PM, Tonton Th wrote:
On 08/06/2012 06:05 PM, Jean-Marc Bourguet a dit:
Erreur (utiliser les 8 bits de poids forts de pointeur parce que l'espace memoire est limite a 24 bits) qui a ete faite au moins deux autres fois. Sur les premier Mac et les IBM 360 (la, c'etait grave au point que quand ils ont fait l'extension sur 32 bits -- prevue depuis le debut -- ils n'ont pu utiliser que 31 bits).
Tu as oublié les premières série des Atari ST (ceux à 68000)
?? Tous les Atari ST ont toujours eu un 68000 (pédalant à 8Mhz, puis 16Mhz pour les Mega STe). L'Atari TT fut le premier modèle à évoluer avec le 68030.
Haaa mon Atari STe ! J'ai commencé C avec ça (avec le compilo "Pure C" il me semble). Avant, je faisais quasiment que de l'assembleur ;)
-- Alexandre
On 12/02/2012 08:42 PM, Tonton Th wrote:
On 08/06/2012 06:05 PM, Jean-Marc Bourguet a dit:
Erreur (utiliser les 8 bits de poids forts de pointeur parce que
l'espace memoire est limite a 24 bits) qui a ete faite au moins deux
autres fois. Sur les premier Mac et les IBM 360 (la, c'etait grave au
point que quand ils ont fait l'extension sur 32 bits -- prevue depuis le
debut -- ils n'ont pu utiliser que 31 bits).
Tu as oublié les premières série des Atari ST (ceux à 68000)
?? Tous les Atari ST ont toujours eu un 68000 (pédalant à 8Mhz, puis
16Mhz pour les Mega STe). L'Atari TT fut le premier modèle à évoluer
avec le 68030.
Haaa mon Atari STe ! J'ai commencé C avec ça (avec le compilo "Pure C"
il me semble). Avant, je faisais quasiment que de l'assembleur ;)
Erreur (utiliser les 8 bits de poids forts de pointeur parce que l'espace memoire est limite a 24 bits) qui a ete faite au moins deux autres fois. Sur les premier Mac et les IBM 360 (la, c'etait grave au point que quand ils ont fait l'extension sur 32 bits -- prevue depuis le debut -- ils n'ont pu utiliser que 31 bits).
Tu as oublié les premières série des Atari ST (ceux à 68000)
?? Tous les Atari ST ont toujours eu un 68000 (pédalant à 8Mhz, puis 16Mhz pour les Mega STe). L'Atari TT fut le premier modèle à évoluer avec le 68030.
Haaa mon Atari STe ! J'ai commencé C avec ça (avec le compilo "Pure C" il me semble). Avant, je faisais quasiment que de l'assembleur ;)
-- Alexandre
Alexandre Bacquart
On 12/03/2012 12:43 AM, Marc Espie wrote:
In article<50bb907e$0$1952$, Tonton Th wrote:
On 08/06/2012 09:46 AM, Jean-Marc Bourguet a dit:
surprenante, mais pas sans debats; gcc continue a faire des choses analogues pour l'overflow -- au moins il y a -fwrapv pour les supprimer, mais il n'y a pas de flag, "ne fait que des optimisations raisonnables"
Même -O0 ?
-O0 fait parfois des non-optimisations pas raisonnables du tout, comme de deposer des zeros dans les variables non initialisees.
(je crois que ca a finalement ete corrige en 4.x)
Ouf ! Il faudrait même une option pour y fiche des valeurs aléatoires (autre que 0). Ca existe ?
-- Alexandre
On 12/03/2012 12:43 AM, Marc Espie wrote:
In article<50bb907e$0$1952$426a74cc@news.free.fr>,
Tonton Th<tth@la.bas.invalid> wrote:
On 08/06/2012 09:46 AM, Jean-Marc Bourguet a dit:
surprenante, mais pas sans debats; gcc continue a faire des choses
analogues pour l'overflow -- au moins il y a -fwrapv pour les supprimer,
mais il n'y a pas de flag, "ne fait que des optimisations raisonnables"
Même -O0 ?
-O0 fait parfois des non-optimisations pas raisonnables du tout, comme
de deposer des zeros dans les variables non initialisees.
(je crois que ca a finalement ete corrige en 4.x)
Ouf ! Il faudrait même une option pour y fiche des valeurs aléatoires
(autre que 0). Ca existe ?
surprenante, mais pas sans debats; gcc continue a faire des choses analogues pour l'overflow -- au moins il y a -fwrapv pour les supprimer, mais il n'y a pas de flag, "ne fait que des optimisations raisonnables"
Même -O0 ?
-O0 fait parfois des non-optimisations pas raisonnables du tout, comme de deposer des zeros dans les variables non initialisees.
(je crois que ca a finalement ete corrige en 4.x)
Ouf ! Il faudrait même une option pour y fiche des valeurs aléatoires (autre que 0). Ca existe ?
-- Alexandre
Jean-Marc Bourguet
Tonton Th writes:
On 08/06/2012 06:05 PM, Jean-Marc Bourguet a dit:
Erreur (utiliser les 8 bits de poids forts de pointeur parce que l'espace memoire est limite a 24 bits) qui a ete faite au moins deux
^^^^^^^^
autres fois. Sur les premier Mac et les IBM 360 (la, c'etait grave au point que quand ils ont fait l'extension sur 32 bits -- prevue depuis le debut -- ils n'ont pu utiliser que 31 bits).
La liste n'avait nulle vocation a etre exhaustive.
A+
-- Jean-Marc FAQ de fclc: http://www.levenez.com/lang/c/faq Site de usenet-fr: http://www.usenet-fr.news.eu.org
Tonton Th <tth@la.bas.invalid> writes:
On 08/06/2012 06:05 PM, Jean-Marc Bourguet a dit:
Erreur (utiliser les 8 bits de poids forts de pointeur parce que
l'espace memoire est limite a 24 bits) qui a ete faite au moins deux
^^^^^^^^
autres fois. Sur les premier Mac et les IBM 360 (la, c'etait grave au
point que quand ils ont fait l'extension sur 32 bits -- prevue depuis le
debut -- ils n'ont pu utiliser que 31 bits).
Erreur (utiliser les 8 bits de poids forts de pointeur parce que l'espace memoire est limite a 24 bits) qui a ete faite au moins deux
^^^^^^^^
autres fois. Sur les premier Mac et les IBM 360 (la, c'etait grave au point que quand ils ont fait l'extension sur 32 bits -- prevue depuis le debut -- ils n'ont pu utiliser que 31 bits).