Il y *a* des archis exotiques. Tous les "undefined behavior" de la norme
en proviennent.
Il y *a* des archis exotiques. Tous les "undefined behavior" de la norme
en proviennent.
Il y *a* des archis exotiques. Tous les "undefined behavior" de la norme
en proviennent.
J'ai reverifie ma norme, la comparaison entre pointeurs non correles est bien
une "undefined behavior".
Il peut donc se passer relativement n'importe quoi dans le cadre du C standard.
C'est en effet ce qui me perturbe. Que la mémoire soit ou non
segmentée, les pointeurs restent des entiers,
les comparer ne doit donc pas poser de problème.
J'ai reverifie ma norme, la comparaison entre pointeurs non correles est bien
une "undefined behavior".
Il peut donc se passer relativement n'importe quoi dans le cadre du C standard.
C'est en effet ce qui me perturbe. Que la mémoire soit ou non
segmentée, les pointeurs restent des entiers,
les comparer ne doit donc pas poser de problème.
J'ai reverifie ma norme, la comparaison entre pointeurs non correles est bien
une "undefined behavior".
Il peut donc se passer relativement n'importe quoi dans le cadre du C standard.
C'est en effet ce qui me perturbe. Que la mémoire soit ou non
segmentée, les pointeurs restent des entiers,
les comparer ne doit donc pas poser de problème.
Par ailleurs, l'affirmation « les pointeurs sont des entiers » me gêne
aux entournures. Même si je sais bien que ces temps-ci, «tout le monde»
travaille avec des architectures linéaires. En effet, ce genre
d'affirmation suppose (indument) que les représentations des pointeurs
partagent *toutes* les propriétés des entiers (des ordinateurs,
c'est-à-dire un intervalle en terme mathématique). Et ce n'est en
pratique pas le cas : certaines valeurs ne représentent pas des
pointeurs valables, d'autres valeurs sont magiques, parfois des
différences entre deux valeurs peuvent avoir un sens (comme entre deux
pointeurs vers le même objet), parfois pas (comme par exemple entre deux
déclarations adjacentes de deux pointeurs, qui sont aléatoires, au sens
d'une variable aléatoire), etc.
Par ailleurs, l'affirmation « les pointeurs sont des entiers » me gêne
aux entournures. Même si je sais bien que ces temps-ci, «tout le monde»
travaille avec des architectures linéaires. En effet, ce genre
d'affirmation suppose (indument) que les représentations des pointeurs
partagent *toutes* les propriétés des entiers (des ordinateurs,
c'est-à-dire un intervalle en terme mathématique). Et ce n'est en
pratique pas le cas : certaines valeurs ne représentent pas des
pointeurs valables, d'autres valeurs sont magiques, parfois des
différences entre deux valeurs peuvent avoir un sens (comme entre deux
pointeurs vers le même objet), parfois pas (comme par exemple entre deux
déclarations adjacentes de deux pointeurs, qui sont aléatoires, au sens
d'une variable aléatoire), etc.
Par ailleurs, l'affirmation « les pointeurs sont des entiers » me gêne
aux entournures. Même si je sais bien que ces temps-ci, «tout le monde»
travaille avec des architectures linéaires. En effet, ce genre
d'affirmation suppose (indument) que les représentations des pointeurs
partagent *toutes* les propriétés des entiers (des ordinateurs,
c'est-à-dire un intervalle en terme mathématique). Et ce n'est en
pratique pas le cas : certaines valeurs ne représentent pas des
pointeurs valables, d'autres valeurs sont magiques, parfois des
différences entre deux valeurs peuvent avoir un sens (comme entre deux
pointeurs vers le même objet), parfois pas (comme par exemple entre deux
déclarations adjacentes de deux pointeurs, qui sont aléatoires, au sens
d'une variable aléatoire), etc.
Experience perso: le basic amiga, pondu par microsoft, deja mauvais a
l'epoque, qui avait cru intelligent de stocker ses info de gc sur les
8 bits de poids fort des pointeurs, vu que, sur les premiers amiga, a
base de 68000, le bus d'adresse etait limite a 24 bits...
Experience perso: le basic amiga, pondu par microsoft, deja mauvais a
l'epoque, qui avait cru intelligent de stocker ses info de gc sur les
8 bits de poids fort des pointeurs, vu que, sur les premiers amiga, a
base de 68000, le bus d'adresse etait limite a 24 bits...
Experience perso: le basic amiga, pondu par microsoft, deja mauvais a
l'epoque, qui avait cru intelligent de stocker ses info de gc sur les
8 bits de poids fort des pointeurs, vu que, sur les premiers amiga, a
base de 68000, le bus d'adresse etait limite a 24 bits...
L'autre cote de la piece, c'est la reponse "si on n'avait pas fait ca,
on aurait ete moins bon et perdu tant de part de marche qu'on aurait pas
survecu pour en profiter". Difficile pour moi de savoir a quel point
c'est vrai.
L'autre cote de la piece, c'est la reponse "si on n'avait pas fait ca,
on aurait ete moins bon et perdu tant de part de marche qu'on aurait pas
survecu pour en profiter". Difficile pour moi de savoir a quel point
c'est vrai.
L'autre cote de la piece, c'est la reponse "si on n'avait pas fait ca,
on aurait ete moins bon et perdu tant de part de marche qu'on aurait pas
survecu pour en profiter". Difficile pour moi de savoir a quel point
c'est vrai.
Il faut *vraiment* que tu changes de mode de fonctionnement vis-a-vis du
langage, ca t'evitera des problemes.
Les questions du genre "je ne comprend pas, sur toutes les archis que je
connais, ca marche comme ca, comment peut-on faire autrement", c'est la
meilleure facon de chercher les emmerdes.
Il y *a* des archis exotiques. Tous les "undefined behavior" de la norme
en proviennent. Dans certains cas, tu vas avoir du mal a avoir une "preuv e
d'existence", sous forme d'une archi sur laquelle ca chie (deja, tu auras
parfois du mal a trouver des gens qui ont ces archis sous la main ou qui en
ont eu l'experience).
Si tu pars dans l'idee de "oh ben, ca doit etre implemente comme ca, parc e
que je n'arrive pas a imaginer que ca puisse etre autrement", tu auras to t
ou tard des problemes. Plutot tot, en fait, Murphy aidant. Suffit que tu
depende d'un comportement mal defini pour que quelqu'un essaie de faire
tourner ton code sur une archi ou ca chie (ca ne rate presque jamais).
Et meme: c'est un mauvais etat d'esprit pour faire du code robuste, donc
de qualite, et encore plus si tu veux faire de la securite informatique.
Il faut beaucoup, beaucoup d'imagination pour trouver toutes les facons d ont
un code peut merder. Mais en fait, ca n'est pas important, parce qu'il y a
une seule facon dont ce code peut marcher... c'est beaucoup plus simple,
et infiniment moins generateur d'emmerdes, de decider qu'on va se placer
dans LE cas ou les choses marchent, LE cas du comportement defini.
A force de vouloir avoir des contre-exemples... on en oublierait presque
qu'au final, le but, c'est de faire des choses qui fonctionnent.
Il faut *vraiment* que tu changes de mode de fonctionnement vis-a-vis du
langage, ca t'evitera des problemes.
Les questions du genre "je ne comprend pas, sur toutes les archis que je
connais, ca marche comme ca, comment peut-on faire autrement", c'est la
meilleure facon de chercher les emmerdes.
Il y *a* des archis exotiques. Tous les "undefined behavior" de la norme
en proviennent. Dans certains cas, tu vas avoir du mal a avoir une "preuv e
d'existence", sous forme d'une archi sur laquelle ca chie (deja, tu auras
parfois du mal a trouver des gens qui ont ces archis sous la main ou qui en
ont eu l'experience).
Si tu pars dans l'idee de "oh ben, ca doit etre implemente comme ca, parc e
que je n'arrive pas a imaginer que ca puisse etre autrement", tu auras to t
ou tard des problemes. Plutot tot, en fait, Murphy aidant. Suffit que tu
depende d'un comportement mal defini pour que quelqu'un essaie de faire
tourner ton code sur une archi ou ca chie (ca ne rate presque jamais).
Et meme: c'est un mauvais etat d'esprit pour faire du code robuste, donc
de qualite, et encore plus si tu veux faire de la securite informatique.
Il faut beaucoup, beaucoup d'imagination pour trouver toutes les facons d ont
un code peut merder. Mais en fait, ca n'est pas important, parce qu'il y a
une seule facon dont ce code peut marcher... c'est beaucoup plus simple,
et infiniment moins generateur d'emmerdes, de decider qu'on va se placer
dans LE cas ou les choses marchent, LE cas du comportement defini.
A force de vouloir avoir des contre-exemples... on en oublierait presque
qu'au final, le but, c'est de faire des choses qui fonctionnent.
Il faut *vraiment* que tu changes de mode de fonctionnement vis-a-vis du
langage, ca t'evitera des problemes.
Les questions du genre "je ne comprend pas, sur toutes les archis que je
connais, ca marche comme ca, comment peut-on faire autrement", c'est la
meilleure facon de chercher les emmerdes.
Il y *a* des archis exotiques. Tous les "undefined behavior" de la norme
en proviennent. Dans certains cas, tu vas avoir du mal a avoir une "preuv e
d'existence", sous forme d'une archi sur laquelle ca chie (deja, tu auras
parfois du mal a trouver des gens qui ont ces archis sous la main ou qui en
ont eu l'experience).
Si tu pars dans l'idee de "oh ben, ca doit etre implemente comme ca, parc e
que je n'arrive pas a imaginer que ca puisse etre autrement", tu auras to t
ou tard des problemes. Plutot tot, en fait, Murphy aidant. Suffit que tu
depende d'un comportement mal defini pour que quelqu'un essaie de faire
tourner ton code sur une archi ou ca chie (ca ne rate presque jamais).
Et meme: c'est un mauvais etat d'esprit pour faire du code robuste, donc
de qualite, et encore plus si tu veux faire de la securite informatique.
Il faut beaucoup, beaucoup d'imagination pour trouver toutes les facons d ont
un code peut merder. Mais en fait, ca n'est pas important, parce qu'il y a
une seule facon dont ce code peut marcher... c'est beaucoup plus simple,
et infiniment moins generateur d'emmerdes, de decider qu'on va se placer
dans LE cas ou les choses marchent, LE cas du comportement defini.
A force de vouloir avoir des contre-exemples... on en oublierait presque
qu'au final, le but, c'est de faire des choses qui fonctionnent.
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"
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"
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"
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 ?
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 ?
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 ?
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).
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).
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 ?
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 ?
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 ?