Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

Unix pour autre processeur que i386....

18 réponses
Avatar
david.remacle
Bonjour,

J'ai cherché via google pour savoir si il y a des systèmes Unix certifié
unix 03 mais qui ne sont pas pour processeur intel...

Car j'ai vu que Leopard avait été certifié unix 03 uniquement pour intel
et pas pour les processeur ppc.

Je me demandais alors si la certification unix 03 était surtout pour les
processeur intel.

Bien à vous

8 réponses

1 2
Avatar
Nicolas George
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.

http://developer.apple.com/mac/library/documentation/Darwin/Reference/ManPages/man3/realloc.3.html

« 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é.
Avatar
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...
Avatar
JKB
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$:
Quelques détails sur ce realloc pommé ?



Après vérification, le cas exact est sur une taille nulle, pas un pointeur
nul.

http://developer.apple.com/mac/library/documentation/Darwin/Reference/ManPages/man3/realloc.3.html

« 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.
Avatar
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.

http://developer.apple.com/mac/library/documentation/Darwin/Reference/ManPages/man3/realloc.3.html

« 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. »



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.

A+

--
Jean-Marc
Site de usenet-fr: http://www.usenet-fr.news.eu.org
Avatar
Paul Gaborit
À (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.

http://developer.apple.com/mac/library/documentation/Darwin/Reference/ManPages/man3/realloc.3.html

« 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/>
Avatar
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.

http://developer.apple.com/mac/library/documentation/Darwin/Reference/ManPages/man3/realloc.3.html

« 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.
Avatar
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.
Avatar
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.
1 2