 |
C++Talk.NET C++ language newsgroups
|
| View previous topic :: View next topic |
| Author |
Message |
Laurent Deniau Guest
|
Posted: Fri Jan 21, 2005 5:35 pm Post subject: TC++PL3 bugs |
|
|
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?
a+, ld.
|
|
| Back to top |
|
 |
Gabriel Dos Reis Guest
|
Posted: Fri Jan 21, 2005 6:09 pm Post subject: Re: TC++PL3 bugs |
|
|
Laurent Deniau <Laurent.Deniau (AT) cern (DOT) ch> writes:
| Quote: | 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
|
|
| Back to top |
|
 |
Laurent Deniau Guest
|
Posted: Fri Jan 21, 2005 6:25 pm Post subject: Re: TC++PL3 bugs |
|
|
Gabriel Dos Reis wrote:
| Quote: | Laurent Deniau <Laurent.Deniau (AT) cern (DOT) 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.
| Quote: | Où est-ce que tu vois csize?
|
dans le enum du Chunk.
| Quote: | 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).
| Quote: | 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.
|
|
| Back to top |
|
 |
Michel Michaud Guest
|
Posted: Fri Jan 21, 2005 6:28 pm Post subject: Re: TC++PL3 bugs |
|
|
Dans le message csreha$j4u$1 (AT) sunnews (DOT) cern.ch,
Laurent Deniau <Laurent.Deniau (AT) cern (DOT) ch> a écrit :
| Quote: | 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...
| Quote: | 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 [email]mm (AT) gdzid (DOT) com[/email]
http://www.gdzid.com
FAQ de fr.comp.lang.c++ :
http://www.cmla.ens-cachan.fr/~dosreis/C++/FAQ/
|
|
| Back to top |
|
 |
Michel Michaud Guest
|
Posted: Fri Jan 21, 2005 6:57 pm Post subject: Re: TC++PL3 bugs |
|
|
Dans le message csrhf0$pap$1 (AT) sunnews (DOT) cern.ch,
Laurent Deniau <Laurent.Deniau (AT) cern (DOT) ch> a écrit :
| Quote: | Gabriel Dos Reis wrote:
Laurent Deniau <Laurent.Deniau (AT) cern (DOT) 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 :-)
| Quote: | 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 :
http://www.research.att.com/~bs/3rd_printing4.html
--
Michel Michaud [email]mm (AT) gdzid (DOT) com[/email]
http://www.gdzid.com
FAQ de fr.comp.lang.c++ :
http://www.cmla.ens-cachan.fr/~dosreis/C++/FAQ/
|
|
| Back to top |
|
 |
Gabriel Dos Reis Guest
|
Posted: Fri Jan 21, 2005 8:10 pm Post subject: Re: TC++PL3 bugs |
|
|
Laurent Deniau <Laurent.Deniau (AT) cern (DOT) ch> writes:
| Quote: | Gabriel Dos Reis wrote:
Laurent Deniau <Laurent.Deniau (AT) cern (DOT) 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.
| Quote: |
Où est-ce que tu vois csize?
dans le enum du Chunk.
|
dans le tirage que j'ai, c'est size.
| Quote: | 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
|
|
| Back to top |
|
 |
Laurent Deniau Guest
|
Posted: Fri Jan 21, 2005 8:40 pm Post subject: Re: TC++PL3 bugs |
|
|
Michel Michaud wrote:
| Quote: | Dans le message csrhf0$pap$1 (AT) sunnews (DOT) cern.ch,
Laurent Deniau <Laurent.Deniau (AT) cern (DOT) ch> a écrit :
Gabriel Dos Reis wrote:
Laurent Deniau <Laurent.Deniau (AT) cern (DOT) 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 ;-)
| Quote: | 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.
Voila ce que j'avais rate. Mais il ne parle pas de l'alignement.
a+, ld.
|
|
| Back to top |
|
 |
|
|
You cannot post new topics in this forum You cannot reply to topics in this forum You cannot edit your posts in this forum You cannot delete your posts in this forum You cannot vote in polls in this forum
|
|