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
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
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/
"DomiPi" <akuj0006@wanadoo.be> 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/
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/
É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.
Le 26/11/03 18:17, dans <87wu9n59sx.fsf@thalassa.informatimago.com>,
« Pascal Bourguignon » <spam@thalassa.informatimago.com> 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.
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.
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.
DomiPi <akuj0006@wanadoo.be> é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.
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.
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/
Éric Lévénez <news@levenez.com> writes:
Le 26/11/03 18:17, dans <87wu9n59sx.fsf@thalassa.informatimago.com>,
« Pascal Bourguignon » <spam@thalassa.informatimago.com> 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/
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/