OVH Cloud OVH Cloud

Comparaison entre pointeurs

25 réponses
Avatar
Taurre
Bonjour =E0 tous,

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 ?

Merci d'avance pour vos r=E9ponses :)

5 réponses

1 2 3
Avatar
espie
In article <50bbaf1c$0$16500$,
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) 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...
Avatar
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
Avatar
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
Avatar
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).



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) pouvaie nt 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 ;)



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
Avatar
Marc
Alexandre Bacquart wrote:

On 12/03/2012 12:43 AM, Marc Espie wrote:
-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 ?



Dans d'autres compilateurs, oui.
1 2 3