« If size is zero and ptr is not NULL, a new, minimum sized object is allocated and the original object is freed. »
Single Unix :
« If size is 0 and ptr is not a null pointer, the object pointed to is freed. »
Un realloc conforme peut être utilisé tout seul : realloc(NULL, size) émule un malloc, realloc(ptr, 0) émule un free. Plusieurs bibliothèques s'en servent pour permettre de configurer facilement, par un unique pointeur sur fonction, l'allocateur utilisé.
tth wrote in message <4bff6397$0$31109$426a74cc@news.free.fr>:
Quelques détails sur ce realloc pommé ?
Après vérification, le cas exact est sur une taille nulle, pas un pointeur
nul.
« If size is zero and ptr is not NULL, a new, minimum sized object is
allocated and the original object is freed. »
Single Unix :
« If size is 0 and ptr is not a null pointer, the object pointed to is
freed. »
Un realloc conforme peut être utilisé tout seul : realloc(NULL, size) émule
un malloc, realloc(ptr, 0) émule un free. Plusieurs bibliothèques s'en
servent pour permettre de configurer facilement, par un unique pointeur sur
fonction, l'allocateur utilisé.
« If size is zero and ptr is not NULL, a new, minimum sized object is allocated and the original object is freed. »
Single Unix :
« If size is 0 and ptr is not a null pointer, the object pointed to is freed. »
Un realloc conforme peut être utilisé tout seul : realloc(NULL, size) émule un malloc, realloc(ptr, 0) émule un free. Plusieurs bibliothèques s'en servent pour permettre de configurer facilement, par un unique pointeur sur fonction, l'allocateur utilisé.
tth
Nicolas George a raconté :
« If size is zero and ptr is not NULL, a new, minimum sized object is allocated and the original object is freed. »
On va dire que c'est un cas d'utilisation assez étrange, et qui me laisse un peu perplexe...
Nicolas George a raconté :
« If size is zero and ptr is not NULL, a new, minimum sized object is
allocated and the original object is freed. »
On va dire que c'est un cas d'utilisation assez étrange, et
qui me laisse un peu perplexe...
« If size is zero and ptr is not NULL, a new, minimum sized object is allocated and the original object is freed. »
Entre-nous, ce n'est pas incohérent.
Lorsque tu fais un malloc() de taille nulle, tu alloues une structure contenant la longueur de la zone (généralement juste avant le pointeur fourni). Je n'ai jamais vu de specs disant que malloc(0) ne devait rien allouer.
Par ailleurs, utiliser realloc() à la place de free(), c'est mal.
Single Unix :
« If size is 0 and ptr is not a null pointer, the object pointed to is freed. »
Tu remarqueras la subtile différence pour free() :
"The free() function shall cause the space pointed to by ptr to be deallocated".
L'un parle de l'objet (realloc), l'autre de l'espace pointé (free), ce qui sont du point de vu de l'allocateur deux choses différentes. Je te conseille de regarder comment est fichu ptmalloc3 pour te faire une idée plus précise.
Un realloc conforme peut être utilisé tout seul : realloc(NULL, size) émule un malloc, realloc(ptr, 0) émule un free.
NON ! C'est une sale habitude de programmeur pressé ! Ce n'est pas parce que tout le monde ou presque fait ça que c'est le cas en général. Il y a des tas de problèmes dans des softs sous Unix à cause de ce problème realloc(ptr,0)==free(ptr). Pour t'en convaincre, lance un coup un vérificateur de mémoire sur un soft quelconque utilisant intensivement realloc(). Tu vas avoir des tas d'alertes sur des blocs de 0 octets définitivement perdus.
Plusieurs bibliothèques s'en servent pour permettre de configurer facilement, par un unique pointeur sur fonction, l'allocateur utilisé.
Et je maintiens que c'est une bêtise parce que rien ne garantit effectivement dans les specs Single Unix 3 que realloc(ptr, 0) est strictement équivalent à free(ptr).
JKB
-- Le cerveau, c'est un véritable scandale écologique. Il représente 2% de notre masse corporelle, mais disperse à lui seul 25% de l'énergie que nous consommons tous les jours.
Le 28-05-2010, ? propos de
Re: Unix pour autre processeur que i386....,
Nicolas George ?crivait dans fr.comp.os.unix :
tth wrote in message <4bff6397$0$31109$426a74cc@news.free.fr>:
Quelques détails sur ce realloc pommé ?
Après vérification, le cas exact est sur une taille nulle, pas un pointeur
nul.
« If size is zero and ptr is not NULL, a new, minimum sized object is
allocated and the original object is freed. »
Entre-nous, ce n'est pas incohérent.
Lorsque tu fais un malloc() de taille nulle, tu alloues une
structure contenant la longueur de la zone (généralement juste avant
le pointeur fourni). Je n'ai jamais vu de specs disant que malloc(0)
ne devait rien allouer.
Par ailleurs, utiliser realloc() à la place de free(), c'est mal.
Single Unix :
« If size is 0 and ptr is not a null pointer, the object pointed to is
freed. »
Tu remarqueras la subtile différence pour free() :
"The free() function shall cause the space pointed to by ptr to be
deallocated".
L'un parle de l'objet (realloc), l'autre de l'espace pointé (free),
ce qui sont du point de vu de l'allocateur deux choses différentes.
Je te conseille de regarder comment est fichu ptmalloc3 pour te
faire une idée plus précise.
Un realloc conforme peut être utilisé tout seul : realloc(NULL, size) émule
un malloc, realloc(ptr, 0) émule un free.
NON ! C'est une sale habitude de programmeur pressé ! Ce n'est pas
parce que tout le monde ou presque fait ça que c'est le cas en
général. Il y a des tas de problèmes dans des softs sous Unix à
cause de ce problème realloc(ptr,0)==free(ptr). Pour t'en
convaincre, lance un coup un vérificateur de mémoire sur un soft
quelconque utilisant intensivement realloc(). Tu vas avoir des tas
d'alertes sur des blocs de 0 octets définitivement perdus.
Plusieurs bibliothèques s'en
servent pour permettre de configurer facilement, par un unique pointeur sur
fonction, l'allocateur utilisé.
Et je maintiens que c'est une bêtise parce que rien ne garantit
effectivement dans les specs Single Unix 3 que realloc(ptr, 0) est
strictement équivalent à free(ptr).
JKB
--
Le cerveau, c'est un véritable scandale écologique. Il représente 2% de notre
masse corporelle, mais disperse à lui seul 25% de l'énergie que nous
consommons tous les jours.
« If size is zero and ptr is not NULL, a new, minimum sized object is allocated and the original object is freed. »
Entre-nous, ce n'est pas incohérent.
Lorsque tu fais un malloc() de taille nulle, tu alloues une structure contenant la longueur de la zone (généralement juste avant le pointeur fourni). Je n'ai jamais vu de specs disant que malloc(0) ne devait rien allouer.
Par ailleurs, utiliser realloc() à la place de free(), c'est mal.
Single Unix :
« If size is 0 and ptr is not a null pointer, the object pointed to is freed. »
Tu remarqueras la subtile différence pour free() :
"The free() function shall cause the space pointed to by ptr to be deallocated".
L'un parle de l'objet (realloc), l'autre de l'espace pointé (free), ce qui sont du point de vu de l'allocateur deux choses différentes. Je te conseille de regarder comment est fichu ptmalloc3 pour te faire une idée plus précise.
Un realloc conforme peut être utilisé tout seul : realloc(NULL, size) émule un malloc, realloc(ptr, 0) émule un free.
NON ! C'est une sale habitude de programmeur pressé ! Ce n'est pas parce que tout le monde ou presque fait ça que c'est le cas en général. Il y a des tas de problèmes dans des softs sous Unix à cause de ce problème realloc(ptr,0)==free(ptr). Pour t'en convaincre, lance un coup un vérificateur de mémoire sur un soft quelconque utilisant intensivement realloc(). Tu vas avoir des tas d'alertes sur des blocs de 0 octets définitivement perdus.
Plusieurs bibliothèques s'en servent pour permettre de configurer facilement, par un unique pointeur sur fonction, l'allocateur utilisé.
Et je maintiens que c'est une bêtise parce que rien ne garantit effectivement dans les specs Single Unix 3 que realloc(ptr, 0) est strictement équivalent à free(ptr).
JKB
-- Le cerveau, c'est un véritable scandale écologique. Il représente 2% de notre masse corporelle, mais disperse à lui seul 25% de l'énergie que nous consommons tous les jours.
Jean-Marc Bourguet
Nicolas George <nicolas$ writes:
tth wrote in message <4bff6397$0$31109$: > Quelques détails sur ce realloc pommé ?
Après vérification, le cas exact est sur une taille nulle, pas un pointeur nul.
« If size is zero and ptr is not NULL, a new, minimum sized object is allocated and the original object is freed. »
Single Unix :
« If size is 0 and ptr is not a null pointer, the object pointed to is freed. »
Pour compléter, voici ce qui dit la doc de Linux :
« If size was equal to 0, either NULL or a pointer suitable to be passed to free() is returned. »
Sauf erreur de ma part, la doc de FreeBSD (et celle de NetBSD) ne dit rien du cas où size vaut zéro. Il faudrait aller voir dans le code.
Pour OpenBSD :
« If size is zero and ptr is not a null pointer, the object it points to is freed and a new zero size object is returned. »
J'ai la flemme d'aller voir ce que dit Solaris...
Un realloc conforme peut être utilisé tout seul : realloc(NULL, size) émule un malloc, realloc(ptr, 0) émule un free. Plusieurs bibliothèques s'en servent pour permettre de configurer facilement, par un unique pointeur sur fonction, l'allocateur utilisé.
Mouais... Aux vues des extraits ci-dessus, cette manière de procéder ne me semble pas facile à porter sur tous les unix. ;-)
-- Paul Gaborit - <http://perso.mines-albi.fr/~gaborit/>
À (at) 28 May 2010 15:00:28 GMT,
Nicolas George <nicolas$george@salle-s.org> écrivait (wrote):
tth wrote in message <4bff6397$0$31109$426a74cc@news.free.fr>:
Quelques détails sur ce realloc pommé ?
Après vérification, le cas exact est sur une taille nulle, pas un pointeur
nul.
« If size is zero and ptr is not NULL, a new, minimum sized object is
allocated and the original object is freed. »
Single Unix :
« If size is 0 and ptr is not a null pointer, the object pointed to is
freed. »
Pour compléter, voici ce qui dit la doc de Linux :
« If size was equal to 0, either NULL or a pointer suitable to be passed
to free() is returned. »
Sauf erreur de ma part, la doc de FreeBSD (et celle de NetBSD) ne dit
rien du cas où size vaut zéro. Il faudrait aller voir dans le code.
Pour OpenBSD :
« If size is zero and ptr is not a null pointer, the object it points to
is freed and a new zero size object is returned. »
J'ai la flemme d'aller voir ce que dit Solaris...
Un realloc conforme peut être utilisé tout seul : realloc(NULL, size) émule
un malloc, realloc(ptr, 0) émule un free. Plusieurs bibliothèques s'en
servent pour permettre de configurer facilement, par un unique pointeur sur
fonction, l'allocateur utilisé.
Mouais... Aux vues des extraits ci-dessus, cette manière de procéder ne
me semble pas facile à porter sur tous les unix. ;-)
--
Paul Gaborit - <http://perso.mines-albi.fr/~gaborit/>
« If size is zero and ptr is not NULL, a new, minimum sized object is allocated and the original object is freed. »
Single Unix :
« If size is 0 and ptr is not a null pointer, the object pointed to is freed. »
Pour compléter, voici ce qui dit la doc de Linux :
« If size was equal to 0, either NULL or a pointer suitable to be passed to free() is returned. »
Sauf erreur de ma part, la doc de FreeBSD (et celle de NetBSD) ne dit rien du cas où size vaut zéro. Il faudrait aller voir dans le code.
Pour OpenBSD :
« If size is zero and ptr is not a null pointer, the object it points to is freed and a new zero size object is returned. »
J'ai la flemme d'aller voir ce que dit Solaris...
Un realloc conforme peut être utilisé tout seul : realloc(NULL, size) émule un malloc, realloc(ptr, 0) émule un free. Plusieurs bibliothèques s'en servent pour permettre de configurer facilement, par un unique pointeur sur fonction, l'allocateur utilisé.
Mouais... Aux vues des extraits ci-dessus, cette manière de procéder ne me semble pas facile à porter sur tous les unix. ;-)
-- Paul Gaborit - <http://perso.mines-albi.fr/~gaborit/>
JKB
Le 28-05-2010, ? propos de Re: Unix pour autre processeur que i386...., Paul Gaborit ?crivait dans fr.comp.os.unix :
À (at) 28 May 2010 15:00:28 GMT, Nicolas George <nicolas$ écrivait (wrote):
tth wrote in message <4bff6397$0$31109$:
Quelques détails sur ce realloc pommé ?
Après vérification, le cas exact est sur une taille nulle, pas un pointeur nul.
« If size is zero and ptr is not NULL, a new, minimum sized object is allocated and the original object is freed. »
Single Unix :
« If size is 0 and ptr is not a null pointer, the object pointed to is freed. »
Pour compléter, voici ce qui dit la doc de Linux :
« If size was equal to 0, either NULL or a pointer suitable to be passed to free() is returned. »
Sauf erreur de ma part, la doc de FreeBSD (et celle de NetBSD) ne dit rien du cas où size vaut zéro. Il faudrait aller voir dans le code.
Pour OpenBSD :
« If size is zero and ptr is not a null pointer, the object it points to is freed and a new zero size object is returned. »
J'ai la flemme d'aller voir ce que dit Solaris...
The realloc() function changes the size of the block pointed to by ptr to size bytes and returns a pointer to the (possi- bly moved) block. The contents will be unchanged up to the
SunOS 5.9 Last change: 8 Jan 2002 1
Standard C Library Functions malloc(3C)
lesser of the new and old sizes. If ptr is NULL, realloc() behaves like malloc() for the specified size. If size is 0 and ptr is not a null pointer, the space pointed to is made available for further allocation by the application, though not returned to the system. Memory is returned to the system only upon termination of the application.
...
The realloc() function changes the size of the block pointed to by ptr to size bytes and returns a pointer to the (possi- bly moved) block. The contents will be unchanged up to the
SunOS 5.10 Last change: 21 Mar 2005 1
Standard C Library Functions malloc(3C)
lesser of the new and old sizes. If the new size of the block requires movement of the block, the space for the pre- vious instantiation of the block is freed. If the new size is larger, the contents of the newly allocated portion of the block are unspecified. If ptr is NULL, realloc() behaves like malloc() for the specified size. If size is 0 and ptr is not a null pointer, the space pointed to is freed.
Donc deux comportements différents pour deux Solaris (sparc) pas très différents (9 et 10).
Un realloc conforme peut être utilisé tout seul : realloc(NULL, size) émule un malloc, realloc(ptr, 0) émule un free. Plusieurs bibliothèques s'en servent pour permettre de configurer facilement, par un unique pointeur sur fonction, l'allocateur utilisé.
Mouais... Aux vues des extraits ci-dessus, cette manière de procéder ne me semble pas facile à porter sur tous les unix. ;-)
C'est le moins qu'on puisse dire.
JKB
-- Le cerveau, c'est un véritable scandale écologique. Il représente 2% de notre masse corporelle, mais disperse à lui seul 25% de l'énergie que nous consommons tous les jours.
Le 28-05-2010, ? propos de
Re: Unix pour autre processeur que i386....,
Paul Gaborit ?crivait dans fr.comp.os.unix :
À (at) 28 May 2010 15:00:28 GMT,
Nicolas George <nicolas$george@salle-s.org> écrivait (wrote):
tth wrote in message <4bff6397$0$31109$426a74cc@news.free.fr>:
Quelques détails sur ce realloc pommé ?
Après vérification, le cas exact est sur une taille nulle, pas un pointeur
nul.
« If size is zero and ptr is not NULL, a new, minimum sized object is
allocated and the original object is freed. »
Single Unix :
« If size is 0 and ptr is not a null pointer, the object pointed to is
freed. »
Pour compléter, voici ce qui dit la doc de Linux :
« If size was equal to 0, either NULL or a pointer suitable to be passed
to free() is returned. »
Sauf erreur de ma part, la doc de FreeBSD (et celle de NetBSD) ne dit
rien du cas où size vaut zéro. Il faudrait aller voir dans le code.
Pour OpenBSD :
« If size is zero and ptr is not a null pointer, the object it points to
is freed and a new zero size object is returned. »
J'ai la flemme d'aller voir ce que dit Solaris...
The realloc() function changes the size of the block pointed
to by ptr to size bytes and returns a pointer to the (possi-
bly moved) block. The contents will be unchanged up to the
SunOS 5.9 Last change: 8 Jan 2002 1
Standard C Library Functions malloc(3C)
lesser of the new and old sizes. If ptr is NULL, realloc()
behaves like malloc() for the specified size. If size is 0
and ptr is not a null pointer, the space pointed to is made
available for further allocation by the application, though
not returned to the system. Memory is returned to the system
only upon termination of the application.
...
The realloc() function changes the size of the block pointed
to by ptr to size bytes and returns a pointer to the (possi-
bly moved) block. The contents will be unchanged up to the
SunOS 5.10 Last change: 21 Mar 2005 1
Standard C Library Functions malloc(3C)
lesser of the new and old sizes. If the new size of the
block requires movement of the block, the space for the pre-
vious instantiation of the block is freed. If the new size
is larger, the contents of the newly allocated portion of
the block are unspecified. If ptr is NULL, realloc() behaves
like malloc() for the specified size. If size is 0 and ptr
is not a null pointer, the space pointed to is freed.
Donc deux comportements différents pour deux Solaris (sparc) pas
très différents (9 et 10).
Un realloc conforme peut être utilisé tout seul : realloc(NULL, size) émule
un malloc, realloc(ptr, 0) émule un free. Plusieurs bibliothèques s'en
servent pour permettre de configurer facilement, par un unique pointeur sur
fonction, l'allocateur utilisé.
Mouais... Aux vues des extraits ci-dessus, cette manière de procéder ne
me semble pas facile à porter sur tous les unix. ;-)
C'est le moins qu'on puisse dire.
JKB
--
Le cerveau, c'est un véritable scandale écologique. Il représente 2% de notre
masse corporelle, mais disperse à lui seul 25% de l'énergie que nous
consommons tous les jours.
« If size is zero and ptr is not NULL, a new, minimum sized object is allocated and the original object is freed. »
Single Unix :
« If size is 0 and ptr is not a null pointer, the object pointed to is freed. »
Pour compléter, voici ce qui dit la doc de Linux :
« If size was equal to 0, either NULL or a pointer suitable to be passed to free() is returned. »
Sauf erreur de ma part, la doc de FreeBSD (et celle de NetBSD) ne dit rien du cas où size vaut zéro. Il faudrait aller voir dans le code.
Pour OpenBSD :
« If size is zero and ptr is not a null pointer, the object it points to is freed and a new zero size object is returned. »
J'ai la flemme d'aller voir ce que dit Solaris...
The realloc() function changes the size of the block pointed to by ptr to size bytes and returns a pointer to the (possi- bly moved) block. The contents will be unchanged up to the
SunOS 5.9 Last change: 8 Jan 2002 1
Standard C Library Functions malloc(3C)
lesser of the new and old sizes. If ptr is NULL, realloc() behaves like malloc() for the specified size. If size is 0 and ptr is not a null pointer, the space pointed to is made available for further allocation by the application, though not returned to the system. Memory is returned to the system only upon termination of the application.
...
The realloc() function changes the size of the block pointed to by ptr to size bytes and returns a pointer to the (possi- bly moved) block. The contents will be unchanged up to the
SunOS 5.10 Last change: 21 Mar 2005 1
Standard C Library Functions malloc(3C)
lesser of the new and old sizes. If the new size of the block requires movement of the block, the space for the pre- vious instantiation of the block is freed. If the new size is larger, the contents of the newly allocated portion of the block are unspecified. If ptr is NULL, realloc() behaves like malloc() for the specified size. If size is 0 and ptr is not a null pointer, the space pointed to is freed.
Donc deux comportements différents pour deux Solaris (sparc) pas très différents (9 et 10).
Un realloc conforme peut être utilisé tout seul : realloc(NULL, size) émule un malloc, realloc(ptr, 0) émule un free. Plusieurs bibliothèques s'en servent pour permettre de configurer facilement, par un unique pointeur sur fonction, l'allocateur utilisé.
Mouais... Aux vues des extraits ci-dessus, cette manière de procéder ne me semble pas facile à porter sur tous les unix. ;-)
C'est le moins qu'on puisse dire.
JKB
-- Le cerveau, c'est un véritable scandale écologique. Il représente 2% de notre masse corporelle, mais disperse à lui seul 25% de l'énergie que nous consommons tous les jours.
Nicolas George
Jean-Marc Bourguet wrote in message :
La description de "Return value" dans les deux editions que j'ai sous la main (Unix98 et Unix 2001), contient:
If size is 0, either a null pointer or a unique pointer that can be successfully passed to free() shall be returned.
Eh bien la norme n'est pas cohérente, et seule une implémentation qui suit l'intersection de toutes les contraintes peut être considérée comme conforme.
Jean-Marc Bourguet wrote in message
<pxbljb46ntl.fsf@news.bourguet.org>:
La description de "Return value" dans les deux editions que j'ai sous la
main (Unix98 et Unix 2001), contient:
If size is 0, either a null pointer or a unique pointer that can be
successfully passed to free() shall be returned.
Eh bien la norme n'est pas cohérente, et seule une implémentation qui suit
l'intersection de toutes les contraintes peut être considérée comme
conforme.
La description de "Return value" dans les deux editions que j'ai sous la main (Unix98 et Unix 2001), contient:
If size is 0, either a null pointer or a unique pointer that can be successfully passed to free() shall be returned.
Eh bien la norme n'est pas cohérente, et seule une implémentation qui suit l'intersection de toutes les contraintes peut être considérée comme conforme.
JKB
Le 28-05-2010, ? propos de Re: Unix pour autre processeur que i386...., Nicolas George ?crivait dans fr.comp.os.unix :
Jean-Marc Bourguet wrote in message :
La description de "Return value" dans les deux editions que j'ai sous la main (Unix98 et Unix 2001), contient:
If size is 0, either a null pointer or a unique pointer that can be successfully passed to free() shall be returned.
Eh bien la norme n'est pas cohérente, et seule une implémentation qui suit l'intersection de toutes les contraintes peut être considérée comme conforme.
Est-ce que tu as lu ce que je t'ai indiqué ? La norme est parfaitement cohérente. realloc() realloue un objet de taille nulle. C'est exactement ce qui est indiqué. Ça ne veut pas dire que la réallocation d'un objet de taille nulle équivaut à sa libération même si c'est vrai sur certains systèmes.
JKB
-- Le cerveau, c'est un véritable scandale écologique. Il représente 2% de notre masse corporelle, mais disperse à lui seul 25% de l'énergie que nous consommons tous les jours.
Le 28-05-2010, ? propos de
Re: Unix pour autre processeur que i386....,
Nicolas George ?crivait dans fr.comp.os.unix :
Jean-Marc Bourguet wrote in message
<pxbljb46ntl.fsf@news.bourguet.org>:
La description de "Return value" dans les deux editions que j'ai sous la
main (Unix98 et Unix 2001), contient:
If size is 0, either a null pointer or a unique pointer that can be
successfully passed to free() shall be returned.
Eh bien la norme n'est pas cohérente, et seule une implémentation qui suit
l'intersection de toutes les contraintes peut être considérée comme
conforme.
Est-ce que tu as lu ce que je t'ai indiqué ? La norme est
parfaitement cohérente. realloc() realloue un objet de taille nulle.
C'est exactement ce qui est indiqué. Ça ne veut pas dire que la
réallocation d'un objet de taille nulle équivaut à sa libération
même si c'est vrai sur certains systèmes.
JKB
--
Le cerveau, c'est un véritable scandale écologique. Il représente 2% de notre
masse corporelle, mais disperse à lui seul 25% de l'énergie que nous
consommons tous les jours.
Le 28-05-2010, ? propos de Re: Unix pour autre processeur que i386...., Nicolas George ?crivait dans fr.comp.os.unix :
Jean-Marc Bourguet wrote in message :
La description de "Return value" dans les deux editions que j'ai sous la main (Unix98 et Unix 2001), contient:
If size is 0, either a null pointer or a unique pointer that can be successfully passed to free() shall be returned.
Eh bien la norme n'est pas cohérente, et seule une implémentation qui suit l'intersection de toutes les contraintes peut être considérée comme conforme.
Est-ce que tu as lu ce que je t'ai indiqué ? La norme est parfaitement cohérente. realloc() realloue un objet de taille nulle. C'est exactement ce qui est indiqué. Ça ne veut pas dire que la réallocation d'un objet de taille nulle équivaut à sa libération même si c'est vrai sur certains systèmes.
JKB
-- Le cerveau, c'est un véritable scandale écologique. Il représente 2% de notre masse corporelle, mais disperse à lui seul 25% de l'énergie que nous consommons tous les jours.