OVH Cloud OVH Cloud

Var static dans lib dynamique

4 réponses
Avatar
DomiPi
Bonjour à tous,
Je voudrais écrire en C qques librairies dynamiques.
Si j'utilise des variables statiques dans mes lib:
Pourrait-il y avoir un problème de corruption de ces variables si plusieurs
programmes font accès simultanément à mes lib? Ou alors ces variables
sont-elles dédoublées pour chaque programme?
Merci de vos lumières

Dominique

4 réponses

Avatar
Pascal Bourguignon
"DomiPi" writes:

Bonjour à tous,
Je voudrais écrire en C qques librairies dynamiques.
Si j'utilise des variables statiques dans mes lib:
Pourrait-il y avoir un problème de corruption de ces variables si plusieurs
programmes font accès simultanément à mes lib? Ou alors ces variables
sont-elles dédoublées pour chaque programme?
Merci de vos lumières


Sur unix chaque processus a sa propre mémoire indépendante des autres.
Le partage des bibliothèques ne veut pas dire partage de mémoire (même
si les implémentations modernes d'unix optimisent et utilisent de la
mémoire partagée pour les blocs en lecture seule, comme ceux contenant
le code exécutable).

Toutes les variables, qu'elles soient "static" (c'est à dire, visible
seulement dans l'unité de compilation où elles se trouvent) ou
qu'elles soient "extern", c'est à dire visible dans toute l'unité de
lien (qu'il s'agisse d'un lien statique ou d'un lien dynamique), sont
donc "dédoublées" pour chaque programme.

Le point important, c'est que "static" est un adjectif qui s'applique
à des choses totalement distinctes, comme l'édition de lien ou
l'étendue de visibilité des variables. Il ne faut pas confondre.

--
__Pascal_Bourguignon__ http://www.informatimago.com/
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Living free in Alaska or in Siberia, a grizzli's life expectancy is 35 years,
but no more than 8 years in captivity. http://www.theadvocates.org/

Avatar
Éric Lévénez
Le 26/11/03 18:17, dans ,
« Pascal Bourguignon » a écrit :

Sur unix chaque processus a sa propre mémoire indépendante des autres.
Le partage des bibliothèques ne veut pas dire partage de mémoire (même
si les implémentations modernes d'unix optimisent et utilisent de la


Les vieux unix aussi optimisent la mémoire, c'est une question de MMU.

mémoire partagée pour les blocs en lecture seule, comme ceux contenant
le code exécutable).

Toutes les variables, qu'elles soient "static" (c'est à dire, visible
seulement dans l'unité de compilation où elles se trouvent) ou
qu'elles soient "extern", c'est à dire visible dans toute l'unité de
lien (qu'il s'agisse d'un lien statique ou d'un lien dynamique), sont
donc "dédoublées" pour chaque programme.


Les variables const sont normalement dans une zone mémoire en read-only,
donc dans des zones non dédoublées.

--
Éric Lévénez -- <http://www.levenez.com/>
Unix is not only an OS, it's a way of life.

Avatar
Laurent Wacrenier
DomiPi écrit:
Je voudrais écrire en C qques librairies dynamiques.
Si j'utilise des variables statiques dans mes lib:
Pourrait-il y avoir un problème de corruption de ces variables si plusieurs
programmes font accès simultanément à mes lib? Ou alors ces variables
sont-elles dédoublées pour chaque programme?


Pas nessessairement, mais elles sont mmapées en privées ce qui fait
que les modifications ne sont pas partagées.

Avatar
Pascal Bourguignon
Éric Lévénez writes:

Le 26/11/03 18:17, dans ,
« Pascal Bourguignon » a écrit :

Sur unix chaque processus a sa propre mémoire indépendante des autres.
Le partage des bibliothèques ne veut pas dire partage de mémoire (même
si les implémentations modernes d'unix optimisent et utilisent de la


Les vieux unix aussi optimisent la mémoire, c'est une question de MMU.

mémoire partagée pour les blocs en lecture seule, comme ceux contenant
le code exécutable).

Toutes les variables, qu'elles soient "static" (c'est à dire, visible
seulement dans l'unité de compilation où elles se trouvent) ou
qu'elles soient "extern", c'est à dire visible dans toute l'unité de
lien (qu'il s'agisse d'un lien statique ou d'un lien dynamique), sont
donc "dédoublées" pour chaque programme.


Les variables const sont normalement dans une zone mémoire en read-only,
donc dans des zones non dédoublées.


J'ai  mis 'dédoublées' entre double-quotes pour indiquer que
j'utilisais le terme dans la signification donnée par l'OP, c'est à
dire: une "copie" par processus.


--
__Pascal_Bourguignon__ http://www.informatimago.com/
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Living free in Alaska or in Siberia, a grizzli's life expectancy is 35 years,
but no more than 8 years in captivity. http://www.theadvocates.org/