J'ai cherche des errata sur la classe Pool (19.4.2) et je n'ai rien
trouve sur la faute de typo (s/[size]/[csize]/) et le bug d'alignement
(char mem[csize] sans padding) qui m'ont sautes aux yeux. Est-ce que
j'ai rate qqchose sur ses pages d'errata?
Cette action est irreversible, confirmez la suppression du commentaire ?
Signaler le commentaire
Veuillez sélectionner un problème
Nudité
Violence
Harcèlement
Fraude
Vente illégale
Discours haineux
Terrorisme
Autre
Gabriel Dos Reis
Laurent Deniau writes:
| J'ai cherche des errata sur la classe Pool (19.4.2) et je n'ai rien | trouve sur la faute de typo (s/[size]/[csize]/) et le bug d'alignement | (char mem[csize] sans padding) qui m'ont sautes aux yeux. Est-ce que | j'ai rate qqchose sur ses pages d'errata?
Quel tirage utilises-tu ?
Où est-ce que tu vois csize?
En ce qui concerne l'alignment, les choses nesont pas très claires (même si en pratique cela fait exactement ce qu'il faut).
Pool::Chunk est un POD dont le premier member est bien mem. Donc, si tu obtiens de la mémoire genre
void* p = operator new(sizeof Pool::Chunk);
tu sais que p est bien aligné pour n'importe quel type d'objet. Si tu place un Pool::Chunk là bas, cela revient à placer aussi Pool::Chunk::mem là bas -- c'est mon interprétation du fait qu'un struct-POD a la même adresse que son premier membre. Donc il aura un alignement qui satisfait n'importe quel type d'objet.
Maintenant, je suppose que
Chunk* n = new Chunk;
est équivalent à
void* p = operator new(sizeof Chunk); Chunk* n = static_cast<Chunk*>(p);
puisque Chunk est un POD.
-- Gaby
Laurent Deniau <Laurent.Deniau@cern.ch> writes:
| J'ai cherche des errata sur la classe Pool (19.4.2) et je n'ai rien
| trouve sur la faute de typo (s/[size]/[csize]/) et le bug d'alignement
| (char mem[csize] sans padding) qui m'ont sautes aux yeux. Est-ce que
| j'ai rate qqchose sur ses pages d'errata?
Quel tirage utilises-tu ?
Où est-ce que tu vois csize?
En ce qui concerne l'alignment, les choses nesont pas très claires
(même si en pratique cela fait exactement ce qu'il faut).
Pool::Chunk est un POD dont le premier member est bien mem.
Donc, si tu obtiens de la mémoire genre
void* p = operator new(sizeof Pool::Chunk);
tu sais que p est bien aligné pour n'importe quel type d'objet.
Si tu place un Pool::Chunk là bas, cela revient à placer aussi
Pool::Chunk::mem là bas -- c'est mon interprétation du fait qu'un
struct-POD a la même adresse que son premier membre. Donc il aura
un alignement qui satisfait n'importe quel type d'objet.
Maintenant, je suppose que
Chunk* n = new Chunk;
est équivalent à
void* p = operator new(sizeof Chunk);
Chunk* n = static_cast<Chunk*>(p);
| J'ai cherche des errata sur la classe Pool (19.4.2) et je n'ai rien | trouve sur la faute de typo (s/[size]/[csize]/) et le bug d'alignement | (char mem[csize] sans padding) qui m'ont sautes aux yeux. Est-ce que | j'ai rate qqchose sur ses pages d'errata?
Quel tirage utilises-tu ?
Où est-ce que tu vois csize?
En ce qui concerne l'alignment, les choses nesont pas très claires (même si en pratique cela fait exactement ce qu'il faut).
Pool::Chunk est un POD dont le premier member est bien mem. Donc, si tu obtiens de la mémoire genre
void* p = operator new(sizeof Pool::Chunk);
tu sais que p est bien aligné pour n'importe quel type d'objet. Si tu place un Pool::Chunk là bas, cela revient à placer aussi Pool::Chunk::mem là bas -- c'est mon interprétation du fait qu'un struct-POD a la même adresse que son premier membre. Donc il aura un alignement qui satisfait n'importe quel type d'objet.
Maintenant, je suppose que
Chunk* n = new Chunk;
est équivalent à
void* p = operator new(sizeof Chunk); Chunk* n = static_cast<Chunk*>(p);
puisque Chunk est un POD.
-- Gaby
Laurent Deniau
Gabriel Dos Reis wrote:
Laurent Deniau writes:
| J'ai cherche des errata sur la classe Pool (19.4.2) et je n'ai rien | trouve sur la faute de typo (s/[size]/[csize]/) et le bug d'alignement | (char mem[csize] sans padding) qui m'ont sautes aux yeux. Est-ce que | j'ai rate qqchose sur ses pages d'errata?
Quel tirage utilises-tu ?
3rd printing 1997, mais j'ai la meme erreur sur mon ES que je n'ai pas sous la main donc je ne connais pas sont tirage.
Où est-ce que tu vois csize?
dans le enum du Chunk.
En ce qui concerne l'alignment, les choses nesont pas très claires (même si en pratique cela fait exactement ce qu'il faut).
Pool::Chunk est un POD dont le premier member est bien mem.
Sur ma version, c'est Chunk *next qui est le premier membre, sinon je n'aurais pas vu de probleme. Le 8*1024-16 aussi n'est pas clair pour moi. Ca devrait etre 8*1024-16-offsetof(Chunk, mem) s'il veut etre sur de tenir sur une page (en considerant que l'allocateur prend maximum 16 char pour ses infos, mais je suppose que c'est ce qu'il sous entend).
Donc, si tu obtiens de la mémoire genre
void* p = operator new(sizeof Pool::Chunk);
tu sais que p est bien aligné pour n'importe quel type d'objet. Si tu place un Pool::Chunk là bas, cela revient à placer aussi Pool::Chunk::mem là bas -- c'est mon interprétation du fait qu'un struct-POD a la même adresse que son premier membre. Donc il aura un alignement qui satisfait n'importe quel type d'objet.
Sauf que c'est pas mem le premier membre de Chunk. Pour aligner le tout il faudrait que mem[] soit dans une union de containte d'alignement.
a+, ld.
Gabriel Dos Reis wrote:
Laurent Deniau <Laurent.Deniau@cern.ch> writes:
| J'ai cherche des errata sur la classe Pool (19.4.2) et je n'ai rien
| trouve sur la faute de typo (s/[size]/[csize]/) et le bug d'alignement
| (char mem[csize] sans padding) qui m'ont sautes aux yeux. Est-ce que
| j'ai rate qqchose sur ses pages d'errata?
Quel tirage utilises-tu ?
3rd printing 1997, mais j'ai la meme erreur sur mon ES que je n'ai pas
sous la main donc je ne connais pas sont tirage.
Où est-ce que tu vois csize?
dans le enum du Chunk.
En ce qui concerne l'alignment, les choses nesont pas très claires
(même si en pratique cela fait exactement ce qu'il faut).
Pool::Chunk est un POD dont le premier member est bien mem.
Sur ma version, c'est Chunk *next qui est le premier membre, sinon je
n'aurais pas vu de probleme. Le 8*1024-16 aussi n'est pas clair pour
moi. Ca devrait etre 8*1024-16-offsetof(Chunk, mem) s'il veut etre sur
de tenir sur une page (en considerant que l'allocateur prend maximum 16
char pour ses infos, mais je suppose que c'est ce qu'il sous entend).
Donc, si tu obtiens de la mémoire genre
void* p = operator new(sizeof Pool::Chunk);
tu sais que p est bien aligné pour n'importe quel type d'objet.
Si tu place un Pool::Chunk là bas, cela revient à placer aussi
Pool::Chunk::mem là bas -- c'est mon interprétation du fait qu'un
struct-POD a la même adresse que son premier membre. Donc il aura
un alignement qui satisfait n'importe quel type d'objet.
Sauf que c'est pas mem le premier membre de Chunk. Pour aligner le tout
il faudrait que mem[] soit dans une union de containte d'alignement.
| J'ai cherche des errata sur la classe Pool (19.4.2) et je n'ai rien | trouve sur la faute de typo (s/[size]/[csize]/) et le bug d'alignement | (char mem[csize] sans padding) qui m'ont sautes aux yeux. Est-ce que | j'ai rate qqchose sur ses pages d'errata?
Quel tirage utilises-tu ?
3rd printing 1997, mais j'ai la meme erreur sur mon ES que je n'ai pas sous la main donc je ne connais pas sont tirage.
Où est-ce que tu vois csize?
dans le enum du Chunk.
En ce qui concerne l'alignment, les choses nesont pas très claires (même si en pratique cela fait exactement ce qu'il faut).
Pool::Chunk est un POD dont le premier member est bien mem.
Sur ma version, c'est Chunk *next qui est le premier membre, sinon je n'aurais pas vu de probleme. Le 8*1024-16 aussi n'est pas clair pour moi. Ca devrait etre 8*1024-16-offsetof(Chunk, mem) s'il veut etre sur de tenir sur une page (en considerant que l'allocateur prend maximum 16 char pour ses infos, mais je suppose que c'est ce qu'il sous entend).
Donc, si tu obtiens de la mémoire genre
void* p = operator new(sizeof Pool::Chunk);
tu sais que p est bien aligné pour n'importe quel type d'objet. Si tu place un Pool::Chunk là bas, cela revient à placer aussi Pool::Chunk::mem là bas -- c'est mon interprétation du fait qu'un struct-POD a la même adresse que son premier membre. Donc il aura un alignement qui satisfait n'importe quel type d'objet.
Sauf que c'est pas mem le premier membre de Chunk. Pour aligner le tout il faudrait que mem[] soit dans une union de containte d'alignement.
a+, ld.
Michel Michaud
Dans le message csreha$j4u$,
J'ai cherche des errata sur la classe Pool (19.4.2) et je n'ai rien trouve sur la faute de typo (s/[size]/[csize]/)
Je ne vois pas le problème dans le code... Je vois un « size » et une utilisation de « size » tout à fait normale...
et le bug d'alignement (char mem[csize] sans padding) qui m'ont sautes aux yeux. Est-ce que j'ai rate qqchose sur ses pages d'errata?
Est-ce vraiment un problème dans un exemple de ce genre ?
-- Michel Michaud http://www.gdzid.com FAQ de fr.comp.lang.c++ : http://www.cmla.ens-cachan.fr/~dosreis/C++/FAQ/
Dans le message csreha$j4u$1@sunnews.cern.ch,
J'ai cherche des errata sur la classe Pool (19.4.2) et je n'ai rien
trouve sur la faute de typo (s/[size]/[csize]/)
Je ne vois pas le problème dans le code... Je vois un « size » et une
utilisation de « size » tout à fait normale...
et le bug d'alignement (char mem[csize] sans padding) qui m'ont
sautes aux yeux. Est-ce que j'ai rate qqchose sur ses pages d'errata?
Est-ce vraiment un problème dans un exemple de ce genre ?
--
Michel Michaud mm@gdzid.com
http://www.gdzid.com
FAQ de fr.comp.lang.c++ :
http://www.cmla.ens-cachan.fr/~dosreis/C++/FAQ/
J'ai cherche des errata sur la classe Pool (19.4.2) et je n'ai rien trouve sur la faute de typo (s/[size]/[csize]/)
Je ne vois pas le problème dans le code... Je vois un « size » et une utilisation de « size » tout à fait normale...
et le bug d'alignement (char mem[csize] sans padding) qui m'ont sautes aux yeux. Est-ce que j'ai rate qqchose sur ses pages d'errata?
Est-ce vraiment un problème dans un exemple de ce genre ?
-- Michel Michaud http://www.gdzid.com FAQ de fr.comp.lang.c++ : http://www.cmla.ens-cachan.fr/~dosreis/C++/FAQ/
Michel Michaud
Dans le message csrhf0$pap$,
Gabriel Dos Reis wrote:
Laurent Deniau writes:
J'ai cherche des errata sur la classe Pool (19.4.2) et je n'ai rien trouve sur la faute de typo (s/[size]/[csize]/) et le bug d'alignement (char mem[csize] sans padding) qui m'ont sautes aux yeux. Est-ce que j'ai rate qqchose sur ses pages d'errata?
Quel tirage utilises-tu ?
3rd printing 1997,
Plutôt ancien :-)
mais j'ai la meme erreur sur mon ES que je n'ai pas sous la main donc je ne connais pas sont tirage.
Mon édition spéciale n'a pas l'erreur...
Les erratas de BS sont classés par édition, ton erreur est indiquée ici :
-- Michel Michaud http://www.gdzid.com FAQ de fr.comp.lang.c++ : http://www.cmla.ens-cachan.fr/~dosreis/C++/FAQ/
Dans le message csrhf0$pap$1@sunnews.cern.ch,
Gabriel Dos Reis wrote:
Laurent Deniau <Laurent.Deniau@cern.ch> writes:
J'ai cherche des errata sur la classe Pool (19.4.2) et je n'ai
rien trouve sur la faute de typo (s/[size]/[csize]/) et le bug
d'alignement (char mem[csize] sans padding) qui m'ont sautes aux
yeux. Est-ce que j'ai rate qqchose sur ses pages d'errata?
Quel tirage utilises-tu ?
3rd printing 1997,
Plutôt ancien :-)
mais j'ai la meme erreur sur mon ES que je n'ai
pas sous la main donc je ne connais pas sont tirage.
Mon édition spéciale n'a pas l'erreur...
Les erratas de BS sont classés par édition, ton erreur est
indiquée ici :
J'ai cherche des errata sur la classe Pool (19.4.2) et je n'ai rien trouve sur la faute de typo (s/[size]/[csize]/) et le bug d'alignement (char mem[csize] sans padding) qui m'ont sautes aux yeux. Est-ce que j'ai rate qqchose sur ses pages d'errata?
Quel tirage utilises-tu ?
3rd printing 1997,
Plutôt ancien :-)
mais j'ai la meme erreur sur mon ES que je n'ai pas sous la main donc je ne connais pas sont tirage.
Mon édition spéciale n'a pas l'erreur...
Les erratas de BS sont classés par édition, ton erreur est indiquée ici :
-- Michel Michaud http://www.gdzid.com FAQ de fr.comp.lang.c++ : http://www.cmla.ens-cachan.fr/~dosreis/C++/FAQ/
Gabriel Dos Reis
Laurent Deniau writes:
| Gabriel Dos Reis wrote: | > Laurent Deniau writes: | > | J'ai cherche des errata sur la classe Pool (19.4.2) et je n'ai rien | > | trouve sur la faute de typo (s/[size]/[csize]/) et le bug d'alignement | > | (char mem[csize] sans padding) qui m'ont sautes aux yeux. Est-ce que | > | j'ai rate qqchose sur ses pages d'errata? | > Quel tirage utilises-tu ? | | 3rd printing 1997, mais j'ai la meme erreur sur mon ES que je n'ai pas | sous la main donc je ne connais pas sont tirage.
hmm, j'ai la SE, first printing sous la main.
| | > Où est-ce que tu vois csize? | | dans le enum du Chunk.
dans le tirage que j'ai, c'est size.
| > En ce qui concerne l'alignment, les choses nesont pas très claires | > (même si en pratique cela fait exactement ce qu'il faut). | > Pool::Chunk est un POD dont le premier member est bien mem. | | Sur ma version, c'est Chunk *next qui est le premier membre, sinon je
Dans ma version c'est mem, donc je suppose que cela a été corrigé.
-- Gaby
Laurent Deniau <Laurent.Deniau@cern.ch> writes:
| Gabriel Dos Reis wrote:
| > Laurent Deniau <Laurent.Deniau@cern.ch> writes:
| > | J'ai cherche des errata sur la classe Pool (19.4.2) et je n'ai rien
| > | trouve sur la faute de typo (s/[size]/[csize]/) et le bug d'alignement
| > | (char mem[csize] sans padding) qui m'ont sautes aux yeux. Est-ce que
| > | j'ai rate qqchose sur ses pages d'errata?
| > Quel tirage utilises-tu ?
|
| 3rd printing 1997, mais j'ai la meme erreur sur mon ES que je n'ai pas
| sous la main donc je ne connais pas sont tirage.
hmm, j'ai la SE, first printing sous la main.
|
| > Où est-ce que tu vois csize?
|
| dans le enum du Chunk.
dans le tirage que j'ai, c'est size.
| > En ce qui concerne l'alignment, les choses nesont pas très claires
| > (même si en pratique cela fait exactement ce qu'il faut).
| > Pool::Chunk est un POD dont le premier member est bien mem.
|
| Sur ma version, c'est Chunk *next qui est le premier membre, sinon je
Dans ma version c'est mem, donc je suppose que cela a été corrigé.
| Gabriel Dos Reis wrote: | > Laurent Deniau writes: | > | J'ai cherche des errata sur la classe Pool (19.4.2) et je n'ai rien | > | trouve sur la faute de typo (s/[size]/[csize]/) et le bug d'alignement | > | (char mem[csize] sans padding) qui m'ont sautes aux yeux. Est-ce que | > | j'ai rate qqchose sur ses pages d'errata? | > Quel tirage utilises-tu ? | | 3rd printing 1997, mais j'ai la meme erreur sur mon ES que je n'ai pas | sous la main donc je ne connais pas sont tirage.
hmm, j'ai la SE, first printing sous la main.
| | > Où est-ce que tu vois csize? | | dans le enum du Chunk.
dans le tirage que j'ai, c'est size.
| > En ce qui concerne l'alignment, les choses nesont pas très claires | > (même si en pratique cela fait exactement ce qu'il faut). | > Pool::Chunk est un POD dont le premier member est bien mem. | | Sur ma version, c'est Chunk *next qui est le premier membre, sinon je
Dans ma version c'est mem, donc je suppose que cela a été corrigé.
-- Gaby
Laurent Deniau
Michel Michaud wrote:
Dans le message csrhf0$pap$,
Gabriel Dos Reis wrote:
Laurent Deniau writes:
J'ai cherche des errata sur la classe Pool (19.4.2) et je n'ai rien trouve sur la faute de typo (s/[size]/[csize]/) et le bug d'alignement (char mem[csize] sans padding) qui m'ont sautes aux yeux. Est-ce que j'ai rate qqchose sur ses pages d'errata?
Quel tirage utilises-tu ?
3rd printing 1997,
Plutôt ancien :-)
C'est pour ca que je me suis offert la SE en 2000 ;-)
mais j'ai la meme erreur sur mon ES que je n'ai pas sous la main donc je ne connais pas sont tirage.
Mon édition spéciale n'a pas l'erreur...
Maintenant que je l'ai sous la main, je peux confirmer que la mienne non plus. Effectivement c'est lie a ma vieille edition.
J'avais csize au lieu de size dans le enum et next etait avant mem. Je pense que dans les deux cas c'est une faute de typo de mon edition.
Les erratas de BS sont classés par édition, ton erreur est indiquée ici :
Voila ce que j'avais rate. Mais il ne parle pas de l'alignement.
a+, ld.
Michel Michaud wrote:
Dans le message csrhf0$pap$1@sunnews.cern.ch,
Gabriel Dos Reis wrote:
Laurent Deniau <Laurent.Deniau@cern.ch> writes:
J'ai cherche des errata sur la classe Pool (19.4.2) et je n'ai
rien trouve sur la faute de typo (s/[size]/[csize]/) et le bug
d'alignement (char mem[csize] sans padding) qui m'ont sautes aux
yeux. Est-ce que j'ai rate qqchose sur ses pages d'errata?
Quel tirage utilises-tu ?
3rd printing 1997,
Plutôt ancien :-)
C'est pour ca que je me suis offert la SE en 2000 ;-)
mais j'ai la meme erreur sur mon ES que je n'ai
pas sous la main donc je ne connais pas sont tirage.
Mon édition spéciale n'a pas l'erreur...
Maintenant que je l'ai sous la main, je peux confirmer que la mienne non
plus. Effectivement c'est lie a ma vieille edition.
J'avais csize au lieu de size dans le enum et next etait avant mem. Je
pense que dans les deux cas c'est une faute de typo de mon edition.
Les erratas de BS sont classés par édition, ton erreur est
indiquée ici :
J'ai cherche des errata sur la classe Pool (19.4.2) et je n'ai rien trouve sur la faute de typo (s/[size]/[csize]/) et le bug d'alignement (char mem[csize] sans padding) qui m'ont sautes aux yeux. Est-ce que j'ai rate qqchose sur ses pages d'errata?
Quel tirage utilises-tu ?
3rd printing 1997,
Plutôt ancien :-)
C'est pour ca que je me suis offert la SE en 2000 ;-)
mais j'ai la meme erreur sur mon ES que je n'ai pas sous la main donc je ne connais pas sont tirage.
Mon édition spéciale n'a pas l'erreur...
Maintenant que je l'ai sous la main, je peux confirmer que la mienne non plus. Effectivement c'est lie a ma vieille edition.
J'avais csize au lieu de size dans le enum et next etait avant mem. Je pense que dans les deux cas c'est une faute de typo de mon edition.
Les erratas de BS sont classés par édition, ton erreur est indiquée ici :