2010-01-09 3 views
2

Supposons qu'un exécutable foo.exe est construit sur la base de bibliothèques statiques et que 6 instances de ce foo.exe tournent en même temps sur la machine. Étant donné que tout le code est identique (partie en lecture seule), à ​​l'exception de la partie d'écriture en lecture sur la RAM, y aura-t-il un partage entre ces 6 instances dans la RAM pour améliorer les performances?Est-ce que plusieurs instances d'un exécutable (construit avec des bibliothèques statiques) partagent quelque chose sur la RAM?

Je sais que si foo.exe ci-dessus utilise des bibliothèques partagées à la place, bien qu'il y ait 6 instances en cours d'exécution, seule une instance de ces bibliothèques partagées sera dans la RAM.

Répondre

6

Cela dépend du système d'exploitation. Pour Linux et Solaris, toutes les instances vont certainement partager les pages mémoire qui contiennent le code (ou le texte tel qu'il est appelé). Ils peuvent également partager des pages de données provenant de l'exécutable (c'est-à-dire pour des données globales et statiques). Ce qui se passe, c'est que ces pages sont partagées avec une technique appelée copy-on-write ou COW. Tant qu'une instance ne modifie pas les pages de données, elles seront partagées. Mais une fois qu'une instance modifie une page de données, elle aura sa propre copie.

Je suppose que les versions modernes de Windows font la même chose, mais je ne sais pas avec certitude.

+0

Merci pour la réponse. Mais si les pages de texte sont partagées alors quel avantage spécial avons-nous avec lib partagé, par rapport à la bibliothèque statique? Y a-t-il des doc/url sur lesquels vous pouvez me diriger pour obtenir plus d'informations à ce sujet. – sud

+0

Les bibliothèques partagées partagent également la mémoire lorsqu'elles sont utilisées par plusieurs exécutables. Si à la fois foo.exe et bar.exe sont liés à la bibliothèque partagée X, la bibliothèque partagée X ne sera chargée qu'une seule fois en mémoire. Mais si foo.exe et bar.exe sont liés à la bibliothèque statique Y, il n'y aura pas de partage entre le processus exécutant foo et la barre de déroulement du processus. –

+0

@solotim - s'il y a un problème spécifique qui vous déroute, je serais heureux de clarifier. –

Questions connexes