Manuel Pégourié-Gonnard écrit :J'imagine que c'est pour permettre ce genre de choses que le standard
spécifie que « All pointers to structure types shall have the same
representation and alignment requirements as each other. »
Je croyais que l'objectif était plutôt de permettre le polymorphisme
(voir la réponse de Samuel pour une extrapolation de l'idée).
En l'occurrence, du point de vue du standard, le "struct MonStruct" du
typedef est un type incomplet, et la déclaration dans «implémentation»
complète le _même_ type ; et évidemment, comme il s'agit du même type,
il est compatible avec lui-même et tous les types pointeur qui en sont
dérivés possèdent les mêmes représentations et contraintes d'alignement.
Manuel Pégourié-Gonnard écrit :
J'imagine que c'est pour permettre ce genre de choses que le standard
spécifie que « All pointers to structure types shall have the same
representation and alignment requirements as each other. »
Je croyais que l'objectif était plutôt de permettre le polymorphisme
(voir la réponse de Samuel pour une extrapolation de l'idée).
En l'occurrence, du point de vue du standard, le "struct MonStruct" du
typedef est un type incomplet, et la déclaration dans «implémentation»
complète le _même_ type ; et évidemment, comme il s'agit du même type,
il est compatible avec lui-même et tous les types pointeur qui en sont
dérivés possèdent les mêmes représentations et contraintes d'alignement.
Manuel Pégourié-Gonnard écrit :J'imagine que c'est pour permettre ce genre de choses que le standard
spécifie que « All pointers to structure types shall have the same
representation and alignment requirements as each other. »
Je croyais que l'objectif était plutôt de permettre le polymorphisme
(voir la réponse de Samuel pour une extrapolation de l'idée).
En l'occurrence, du point de vue du standard, le "struct MonStruct" du
typedef est un type incomplet, et la déclaration dans «implémentation»
complète le _même_ type ; et évidemment, comme il s'agit du même type,
il est compatible avec lui-même et tous les types pointeur qui en sont
dérivés possèdent les mêmes représentations et contraintes d'alignement.
Manuel Pégourié-Gonnard écrit :J'imagine que c'est pour permettre ce genre de choses que le standard
spécifie que « All pointers to structure types shall have the same
representation and alignment requirements as each other. »
Mais côté utilisateur, le compilo voit :
struct foo; /* via #include "interface.h" */
/* plus loin */
struct foo *bar;
Et là il me semble qu'il a besoin de connaître la (taille de la)
réprésentation et les contraintes d'alignement des struct foo *,
histoire de pouvoir allouer de la place pour bar.
Donc il faut qu'il connaisse ces choses pour un pointeur sur un
type structure même incomplet.
Du coup il me semble que si la norme ne précisait pas que tous les
pointeurs vers des structures ont la même représentation et les mêmes
contraintes d'alignement, le fragment de code ci-dessus ne serait pas
compilable (ou pas de façon portable en tout cas).
Manuel Pégourié-Gonnard écrit :
J'imagine que c'est pour permettre ce genre de choses que le standard
spécifie que « All pointers to structure types shall have the same
representation and alignment requirements as each other. »
Mais côté utilisateur, le compilo voit :
struct foo; /* via #include "interface.h" */
/* plus loin */
struct foo *bar;
Et là il me semble qu'il a besoin de connaître la (taille de la)
réprésentation et les contraintes d'alignement des struct foo *,
histoire de pouvoir allouer de la place pour bar.
Donc il faut qu'il connaisse ces choses pour un pointeur sur un
type structure même incomplet.
Du coup il me semble que si la norme ne précisait pas que tous les
pointeurs vers des structures ont la même représentation et les mêmes
contraintes d'alignement, le fragment de code ci-dessus ne serait pas
compilable (ou pas de façon portable en tout cas).
Manuel Pégourié-Gonnard écrit :J'imagine que c'est pour permettre ce genre de choses que le standard
spécifie que « All pointers to structure types shall have the same
representation and alignment requirements as each other. »
Mais côté utilisateur, le compilo voit :
struct foo; /* via #include "interface.h" */
/* plus loin */
struct foo *bar;
Et là il me semble qu'il a besoin de connaître la (taille de la)
réprésentation et les contraintes d'alignement des struct foo *,
histoire de pouvoir allouer de la place pour bar.
Donc il faut qu'il connaisse ces choses pour un pointeur sur un
type structure même incomplet.
Du coup il me semble que si la norme ne précisait pas que tous les
pointeurs vers des structures ont la même représentation et les mêmes
contraintes d'alignement, le fragment de code ci-dessus ne serait pas
compilable (ou pas de façon portable en tout cas).
Du côté implémentation, oui on est d'accord. Mais côté utilisateur, le
compilo voit :
struct foo; /* via #include "interface.h" */
/* plus loin */
struct foo *bar;
Et là il me semble qu'il a besoin de connaître la (taille de la)
réprésentation et les contraintes d'alignement des struct foo *,
histoire de pouvoir allouer de la place pour bar.
Du côté implémentation, oui on est d'accord. Mais côté utilisateur, le
compilo voit :
struct foo; /* via #include "interface.h" */
/* plus loin */
struct foo *bar;
Et là il me semble qu'il a besoin de connaître la (taille de la)
réprésentation et les contraintes d'alignement des struct foo *,
histoire de pouvoir allouer de la place pour bar.
Du côté implémentation, oui on est d'accord. Mais côté utilisateur, le
compilo voit :
struct foo; /* via #include "interface.h" */
/* plus loin */
struct foo *bar;
Et là il me semble qu'il a besoin de connaître la (taille de la)
réprésentation et les contraintes d'alignement des struct foo *,
histoire de pouvoir allouer de la place pour bar.
struct foo; /* via #include "interface.h" */
/* plus loin */
struct foo *bar;
Et là il me semble qu'il a besoin de connaître la (taille de la)
réprésentation et les contraintes d'alignement des struct foo *,
histoire de pouvoir allouer de la place pour bar.
Pourquoi? Si je me mets à la place du CPU: un pointeur est un pointeur,
une adresse mémoire et, généralement parlant (on ignore les far/near
et autres "paged"), toutes les adresses ont la même taille.
Du point de vu du processeur, un pointeur sur X ou sur Y c'est
toujours un pointeur. On a uniquement besoin de connaitre X ou Y si:
- on accède aux champs (évidemment): bar->champ
- on fait de l’arithmétique avec les pointeurs: ++bar (pour savoir de
combien d'octets avancer).
- on accède à autre chose que *bar ou bar[0]: en effet
bar[i] = *(bar + i*sizeof(struct foo)) et sizeof(struct foo)
n'est pas connu.
Donc en gros tant qu'on utilise bar comme l'adresse d'un élément
struct foo sans changer sa valeur, alors on ne se préoccupe pas
de la taille ou de la structure de la zone mémoire pointée et alors
tout doit marcher correctement sans avoir besoin de plus d'information.
struct foo; /* via #include "interface.h" */
/* plus loin */
struct foo *bar;
Et là il me semble qu'il a besoin de connaître la (taille de la)
réprésentation et les contraintes d'alignement des struct foo *,
histoire de pouvoir allouer de la place pour bar.
Pourquoi? Si je me mets à la place du CPU: un pointeur est un pointeur,
une adresse mémoire et, généralement parlant (on ignore les far/near
et autres "paged"), toutes les adresses ont la même taille.
Du point de vu du processeur, un pointeur sur X ou sur Y c'est
toujours un pointeur. On a uniquement besoin de connaitre X ou Y si:
- on accède aux champs (évidemment): bar->champ
- on fait de l’arithmétique avec les pointeurs: ++bar (pour savoir de
combien d'octets avancer).
- on accède à autre chose que *bar ou bar[0]: en effet
bar[i] = *(bar + i*sizeof(struct foo)) et sizeof(struct foo)
n'est pas connu.
Donc en gros tant qu'on utilise bar comme l'adresse d'un élément
struct foo sans changer sa valeur, alors on ne se préoccupe pas
de la taille ou de la structure de la zone mémoire pointée et alors
tout doit marcher correctement sans avoir besoin de plus d'information.
struct foo; /* via #include "interface.h" */
/* plus loin */
struct foo *bar;
Et là il me semble qu'il a besoin de connaître la (taille de la)
réprésentation et les contraintes d'alignement des struct foo *,
histoire de pouvoir allouer de la place pour bar.
Pourquoi? Si je me mets à la place du CPU: un pointeur est un pointeur,
une adresse mémoire et, généralement parlant (on ignore les far/near
et autres "paged"), toutes les adresses ont la même taille.
Du point de vu du processeur, un pointeur sur X ou sur Y c'est
toujours un pointeur. On a uniquement besoin de connaitre X ou Y si:
- on accède aux champs (évidemment): bar->champ
- on fait de l’arithmétique avec les pointeurs: ++bar (pour savoir de
combien d'octets avancer).
- on accède à autre chose que *bar ou bar[0]: en effet
bar[i] = *(bar + i*sizeof(struct foo)) et sizeof(struct foo)
n'est pas connu.
Donc en gros tant qu'on utilise bar comme l'adresse d'un élément
struct foo sans changer sa valeur, alors on ne se préoccupe pas
de la taille ou de la structure de la zone mémoire pointée et alors
tout doit marcher correctement sans avoir besoin de plus d'information.
Samuel DEVULDER écrivit :struct foo; /* via #include "interface.h" */
/* plus loin */
struct foo *bar;
Et là il me semble qu'il a besoin de connaître la (taille de la)
réprésentation et les contraintes d'alignement des struct foo *,
histoire de pouvoir allouer de la place pour bar.
Pourquoi? Si je me mets à la place du CPU: un pointeur est un pointeur,
une adresse mémoire et, généralement parlant (on ignore les far/near
et autres "paged"), toutes les adresses ont la même taille.
Le problème ici est précisemment celui des far/near et autres "paged",
ou encore celui des architectures où il existe plusieurs tailles de
pointeurs.
Samuel DEVULDER écrivit :
struct foo; /* via #include "interface.h" */
/* plus loin */
struct foo *bar;
Et là il me semble qu'il a besoin de connaître la (taille de la)
réprésentation et les contraintes d'alignement des struct foo *,
histoire de pouvoir allouer de la place pour bar.
Pourquoi? Si je me mets à la place du CPU: un pointeur est un pointeur,
une adresse mémoire et, généralement parlant (on ignore les far/near
et autres "paged"), toutes les adresses ont la même taille.
Le problème ici est précisemment celui des far/near et autres "paged",
ou encore celui des architectures où il existe plusieurs tailles de
pointeurs.
Samuel DEVULDER écrivit :struct foo; /* via #include "interface.h" */
/* plus loin */
struct foo *bar;
Et là il me semble qu'il a besoin de connaître la (taille de la)
réprésentation et les contraintes d'alignement des struct foo *,
histoire de pouvoir allouer de la place pour bar.
Pourquoi? Si je me mets à la place du CPU: un pointeur est un pointeur,
une adresse mémoire et, généralement parlant (on ignore les far/near
et autres "paged"), toutes les adresses ont la même taille.
Le problème ici est précisemment celui des far/near et autres "paged",
ou encore celui des architectures où il existe plusieurs tailles de
pointeurs.
Pourquoi? Si je me mets à la place du CPU: un pointeur est un pointeur,
une adresse mémoire et, généralement parlant (on ignore les far/near
et autres "paged"), toutes les adresses ont la même taille.
Pourquoi? Si je me mets à la place du CPU: un pointeur est un pointeur,
une adresse mémoire et, généralement parlant (on ignore les far/near
et autres "paged"), toutes les adresses ont la même taille.
Pourquoi? Si je me mets à la place du CPU: un pointeur est un pointeur,
une adresse mémoire et, généralement parlant (on ignore les far/near
et autres "paged"), toutes les adresses ont la même taille.
Non. Sur une machine adressable par mot où l'implémentation fait le choix
d'avoir un char qui correspond à une sous-unité du mot, un pointeur vers un
char ou vers un short peut avoir un format différent des autres pointeurs.
La norme demande donc pour les structs d'utiliser soit des pointeurs
normaux et d'avoir des structs alignées au moins sur les mots (et donc une
struct ne contenant qu'un char aura une taille plus grande que un), soit
des pointeurs plus grands (et donc les pointeurs vers des structs devant
être bien alignées pour d'autres raisons prendront plus de place que
nécessaire).
La seule implémentation que je connais pour une machine adressable par mot
utilisant des parties de mots comme char utilise des pointeurs de même
taille pour char* et int* (car utiliser une taille plus petite ne
permettrait pas d'adresser tout l'espace mémoire), mais le format interne
est différent. Et les pointeurs vers des structs utilisent le même format
que int* (dont une struct avec un seul char a une taille de 4).
(Ce genre d'architecture n'est d'un intérêt qu'annectotique de nos jours;
les seules machines adressables par mots ne sont pas utilisées pour
manipuler des caractères et les implémentations du C pour ces machines font
le choix plus simple char=short=int).
Non. Sur une machine adressable par mot où l'implémentation fait le choix
d'avoir un char qui correspond à une sous-unité du mot, un pointeur vers un
char ou vers un short peut avoir un format différent des autres pointeurs.
La norme demande donc pour les structs d'utiliser soit des pointeurs
normaux et d'avoir des structs alignées au moins sur les mots (et donc une
struct ne contenant qu'un char aura une taille plus grande que un), soit
des pointeurs plus grands (et donc les pointeurs vers des structs devant
être bien alignées pour d'autres raisons prendront plus de place que
nécessaire).
La seule implémentation que je connais pour une machine adressable par mot
utilisant des parties de mots comme char utilise des pointeurs de même
taille pour char* et int* (car utiliser une taille plus petite ne
permettrait pas d'adresser tout l'espace mémoire), mais le format interne
est différent. Et les pointeurs vers des structs utilisent le même format
que int* (dont une struct avec un seul char a une taille de 4).
(Ce genre d'architecture n'est d'un intérêt qu'annectotique de nos jours;
les seules machines adressables par mots ne sont pas utilisées pour
manipuler des caractères et les implémentations du C pour ces machines font
le choix plus simple char=short=int).
Non. Sur une machine adressable par mot où l'implémentation fait le choix
d'avoir un char qui correspond à une sous-unité du mot, un pointeur vers un
char ou vers un short peut avoir un format différent des autres pointeurs.
La norme demande donc pour les structs d'utiliser soit des pointeurs
normaux et d'avoir des structs alignées au moins sur les mots (et donc une
struct ne contenant qu'un char aura une taille plus grande que un), soit
des pointeurs plus grands (et donc les pointeurs vers des structs devant
être bien alignées pour d'autres raisons prendront plus de place que
nécessaire).
La seule implémentation que je connais pour une machine adressable par mot
utilisant des parties de mots comme char utilise des pointeurs de même
taille pour char* et int* (car utiliser une taille plus petite ne
permettrait pas d'adresser tout l'espace mémoire), mais le format interne
est différent. Et les pointeurs vers des structs utilisent le même format
que int* (dont une struct avec un seul char a une taille de 4).
(Ce genre d'architecture n'est d'un intérêt qu'annectotique de nos jours;
les seules machines adressables par mots ne sont pas utilisées pour
manipuler des caractères et les implémentations du C pour ces machines font
le choix plus simple char=short=int).
Apres, tu peux parler de dialectes de C qui sortent completement de la
norme, mais ca devient tres tres anecdotique, et de moins en moins utile
aujourd'hui...
Apres, tu peux parler de dialectes de C qui sortent completement de la
norme, mais ca devient tres tres anecdotique, et de moins en moins utile
aujourd'hui...
Apres, tu peux parler de dialectes de C qui sortent completement de la
norme, mais ca devient tres tres anecdotique, et de moins en moins utile
aujourd'hui...
Le 02/02/2012 18:41, Jean-Marc Bourguet a écrit :Non. Sur une machine adressable par mot où l'implémentation fait le choix
d'avoir un char qui correspond à une sous-unité du mot, un pointeur vers un
char ou vers un short peut avoir un format différent des autres pointeurs.
Que le format soit différents, ok. Mais même taille est identique, non?
sinon comment tu passes vers/depuis un void* sans perdre des bits au
passage?
La norme demande donc pour les structs d'utiliser soit des pointeurs
normaux et d'avoir des structs alignées au moins sur les mots (et donc une
struct ne contenant qu'un char aura une taille plus grande que un), soit
Que les struct aient des tailles différentes suivant le padding, c'est
entendu. Mais ton pointeur sur la struct a une taille standard, non?
des pointeurs plus grands (et donc les pointeurs vers des structs devant
être bien alignées pour d'autres raisons prendront plus de place que
nécessaire).
Admettons qu'il existe des pointeurs plus gros que les standard pour
ces structures spéciales. Alors comment fais tu pour utiliser les
fonctions standard (memset/memcpy/...) qui ne connaissent que les
pointeurs "plus petits" ? On perd de l'info quelque part.
J'avoue ne pas trop suivre ou imaginer la situation. D'ailleurs je n'ai
jamais rencontré ce cas. As tu un nom de machine et de compilo C qui
aient des pointeurs parfois "plus gros" que les autres. Cela m'intrigue.
Le 02/02/2012 18:41, Jean-Marc Bourguet a écrit :
Non. Sur une machine adressable par mot où l'implémentation fait le choix
d'avoir un char qui correspond à une sous-unité du mot, un pointeur vers un
char ou vers un short peut avoir un format différent des autres pointeurs.
Que le format soit différents, ok. Mais même taille est identique, non?
sinon comment tu passes vers/depuis un void* sans perdre des bits au
passage?
La norme demande donc pour les structs d'utiliser soit des pointeurs
normaux et d'avoir des structs alignées au moins sur les mots (et donc une
struct ne contenant qu'un char aura une taille plus grande que un), soit
Que les struct aient des tailles différentes suivant le padding, c'est
entendu. Mais ton pointeur sur la struct a une taille standard, non?
des pointeurs plus grands (et donc les pointeurs vers des structs devant
être bien alignées pour d'autres raisons prendront plus de place que
nécessaire).
Admettons qu'il existe des pointeurs plus gros que les standard pour
ces structures spéciales. Alors comment fais tu pour utiliser les
fonctions standard (memset/memcpy/...) qui ne connaissent que les
pointeurs "plus petits" ? On perd de l'info quelque part.
J'avoue ne pas trop suivre ou imaginer la situation. D'ailleurs je n'ai
jamais rencontré ce cas. As tu un nom de machine et de compilo C qui
aient des pointeurs parfois "plus gros" que les autres. Cela m'intrigue.
Le 02/02/2012 18:41, Jean-Marc Bourguet a écrit :Non. Sur une machine adressable par mot où l'implémentation fait le choix
d'avoir un char qui correspond à une sous-unité du mot, un pointeur vers un
char ou vers un short peut avoir un format différent des autres pointeurs.
Que le format soit différents, ok. Mais même taille est identique, non?
sinon comment tu passes vers/depuis un void* sans perdre des bits au
passage?
La norme demande donc pour les structs d'utiliser soit des pointeurs
normaux et d'avoir des structs alignées au moins sur les mots (et donc une
struct ne contenant qu'un char aura une taille plus grande que un), soit
Que les struct aient des tailles différentes suivant le padding, c'est
entendu. Mais ton pointeur sur la struct a une taille standard, non?
des pointeurs plus grands (et donc les pointeurs vers des structs devant
être bien alignées pour d'autres raisons prendront plus de place que
nécessaire).
Admettons qu'il existe des pointeurs plus gros que les standard pour
ces structures spéciales. Alors comment fais tu pour utiliser les
fonctions standard (memset/memcpy/...) qui ne connaissent que les
pointeurs "plus petits" ? On perd de l'info quelque part.
J'avoue ne pas trop suivre ou imaginer la situation. D'ailleurs je n'ai
jamais rencontré ce cas. As tu un nom de machine et de compilo C qui
aient des pointeurs parfois "plus gros" que les autres. Cela m'intrigue.
Tu pourrais avoir des tailles différentes. Un void* devrait simplement
avoir une taille suffisante pour le plus grand format (vraisemblablement
sans même indiquer duquel il s'agit) ou les cast de et vers void faire de
la transformation de données.
struct s { char c; }
Soit tu as sizeof(struct s) == 1, et tu utilises le même format que char*
pour toutes les structs, soit tu ajoutes du padding
Admettons qu'il existe des pointeurs plus gros que les standard pour
ces structures spéciales. Alors comment fais tu pour utiliser les
fonctions standard (memset/memcpy/...) qui ne connaissent que les
pointeurs "plus petits" ? On perd de l'info quelque part.
C'est plutôt l'inverse, les char* (et les void*) plus grand que les struct*.
J'avoue ne pas trop suivre ou imaginer la situation.
jamais rencontré ce cas. As tu un nom de machine et de compilo C qui
aient des pointeurs parfois "plus gros" que les autres. Cela m'intrigue.
L'implémentation logique pour un PDP-10 sans mémoire étendue serait d'avoir
un char de 9 bit, un short de 18 bit, un int et un long de 36 bits. Un
void*, char* et short* sur 36 bits, les autres pointeurs (sauf peut-être
les enums, je ne sais plus les contraintes sur eux) sur 18 bits.
Le GE-635 (une des premières machines sur lesquelles C a été porté) a une
organisation mémoire proche de celle du PDP-10 (c'est aussi une machine
adressant des mots de 36 bits, avec des adresses sur 18 bits, ce qui est
une organisation qui remonte au moins à l'IBM 701 vers 1950). Ça ne
m'étonnerait pas qu'elle ait utilisé eu ces tailles, mais j'ai trouvé peu
d'info dessus (http://www.lysator.liu.se/c/bwk-tutor.html indique que int
était sur 36 bits et char sur 9 -- à cette époque short et long n'existait
pas encore -- mais je n'ai rien vu sur la taille des pointeurs)
Tu pourrais avoir des tailles différentes. Un void* devrait simplement
avoir une taille suffisante pour le plus grand format (vraisemblablement
sans même indiquer duquel il s'agit) ou les cast de et vers void faire de
la transformation de données.
struct s { char c; }
Soit tu as sizeof(struct s) == 1, et tu utilises le même format que char*
pour toutes les structs, soit tu ajoutes du padding
Admettons qu'il existe des pointeurs plus gros que les standard pour
ces structures spéciales. Alors comment fais tu pour utiliser les
fonctions standard (memset/memcpy/...) qui ne connaissent que les
pointeurs "plus petits" ? On perd de l'info quelque part.
C'est plutôt l'inverse, les char* (et les void*) plus grand que les struct*.
J'avoue ne pas trop suivre ou imaginer la situation.
jamais rencontré ce cas. As tu un nom de machine et de compilo C qui
aient des pointeurs parfois "plus gros" que les autres. Cela m'intrigue.
L'implémentation logique pour un PDP-10 sans mémoire étendue serait d'avoir
un char de 9 bit, un short de 18 bit, un int et un long de 36 bits. Un
void*, char* et short* sur 36 bits, les autres pointeurs (sauf peut-être
les enums, je ne sais plus les contraintes sur eux) sur 18 bits.
Le GE-635 (une des premières machines sur lesquelles C a été porté) a une
organisation mémoire proche de celle du PDP-10 (c'est aussi une machine
adressant des mots de 36 bits, avec des adresses sur 18 bits, ce qui est
une organisation qui remonte au moins à l'IBM 701 vers 1950). Ça ne
m'étonnerait pas qu'elle ait utilisé eu ces tailles, mais j'ai trouvé peu
d'info dessus (http://www.lysator.liu.se/c/bwk-tutor.html indique que int
était sur 36 bits et char sur 9 -- à cette époque short et long n'existait
pas encore -- mais je n'ai rien vu sur la taille des pointeurs)
Tu pourrais avoir des tailles différentes. Un void* devrait simplement
avoir une taille suffisante pour le plus grand format (vraisemblablement
sans même indiquer duquel il s'agit) ou les cast de et vers void faire de
la transformation de données.
struct s { char c; }
Soit tu as sizeof(struct s) == 1, et tu utilises le même format que char*
pour toutes les structs, soit tu ajoutes du padding
Admettons qu'il existe des pointeurs plus gros que les standard pour
ces structures spéciales. Alors comment fais tu pour utiliser les
fonctions standard (memset/memcpy/...) qui ne connaissent que les
pointeurs "plus petits" ? On perd de l'info quelque part.
C'est plutôt l'inverse, les char* (et les void*) plus grand que les struct*.
J'avoue ne pas trop suivre ou imaginer la situation.
jamais rencontré ce cas. As tu un nom de machine et de compilo C qui
aient des pointeurs parfois "plus gros" que les autres. Cela m'intrigue.
L'implémentation logique pour un PDP-10 sans mémoire étendue serait d'avoir
un char de 9 bit, un short de 18 bit, un int et un long de 36 bits. Un
void*, char* et short* sur 36 bits, les autres pointeurs (sauf peut-être
les enums, je ne sais plus les contraintes sur eux) sur 18 bits.
Le GE-635 (une des premières machines sur lesquelles C a été porté) a une
organisation mémoire proche de celle du PDP-10 (c'est aussi une machine
adressant des mots de 36 bits, avec des adresses sur 18 bits, ce qui est
une organisation qui remonte au moins à l'IBM 701 vers 1950). Ça ne
m'étonnerait pas qu'elle ait utilisé eu ces tailles, mais j'ai trouvé peu
d'info dessus (http://www.lysator.liu.se/c/bwk-tutor.html indique que int
était sur 36 bits et char sur 9 -- à cette époque short et long n'existait
pas encore -- mais je n'ai rien vu sur la taille des pointeurs)