IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

C++ Discussion :

Organisation de la mémoire virtuelle d'un processus


Sujet :

C++

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Nouveau candidat au Club
    Profil pro
    Inscrit en
    Juillet 2011
    Messages
    2
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2011
    Messages : 2
    Par défaut Organisation de la mémoire virtuelle d'un processus
    Bonjour à tous

    J'ai pu voir en utilisant VMMAP que la mémoire virtuelle de mes processus est plutot bordélique. Or j'ai besoin de garder une zone mémoire libre commune entre toutes mes applications, et si possible de très grande taille (125Mo si possible 256Mo). Donc avec une ou deux applis ça va, on s'en sort "a la main" avec VMMAP mais lorsqu'on a des dizaines d'applis c'est l'enfer.

    J'ai pu voir qu'il était possible de lister les DLL et de fixer leur emplacement précis en mémoire virtuelle lors du link avec Visual C++ 2008 Express Ed. J'aimerais savoir s'il est possible alors de fixer l'emplacement des autres données en mémoire virtuelle (private data, heap etc...) ou plus simplement d'imposer une zone de mémoire virtuelle vierge.

    z'avez vous z'une idée ?

  2. #2
    Membre éclairé Avatar de Suryavarman
    Homme Profil pro
    Développeur 3D
    Inscrit en
    Mai 2006
    Messages
    233
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Développeur 3D
    Secteur : Tourisme - Loisirs

    Informations forums :
    Inscription : Mai 2006
    Messages : 233
    Par défaut
    Est ce que tu as regardé du côté des pool de mémoire? (Il y a de grande chance que ce que je dise soit à côté de la plaque vue qu'il est sujet de partager entre plusieurs applications un espace mémoire. )

    Tu alloue une zone mémoire et dedans tu fais les allocations qui te posent problèmes.

    http://cpp.developpez.com/faq/cpp/?p...sse_specifique

    http://www.boost.org/doc/libs/1_47_0...doc/index.html

    http://www.nedprod.com/programs/portable/nedmalloc/

  3. #3
    Membre Expert

    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2007
    Messages
    1 895
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Septembre 2007
    Messages : 1 895
    Par défaut
    Citation Envoyé par Zufu91 Voir le message
    Bonjour à tous

    J'ai pu voir en utilisant VMMAP que la mémoire virtuelle de mes processus est plutot bordélique. Or j'ai besoin de garder une zone mémoire libre commune entre toutes mes applications, et si possible de très grande taille (125Mo si possible 256Mo). Donc avec une ou deux applis ça va, on s'en sort "a la main" avec VMMAP mais lorsqu'on a des dizaines d'applis c'est l'enfer.

    J'ai pu voir qu'il était possible de lister les DLL et de fixer leur emplacement précis en mémoire virtuelle lors du link avec Visual C++ 2008 Express Ed. J'aimerais savoir s'il est possible alors de fixer l'emplacement des autres données en mémoire virtuelle (private data, heap etc...) ou plus simplement d'imposer une zone de mémoire virtuelle vierge.

    z'avez vous z'une idée ?
    J'ai idée que je ne comprends pas vraiment les raisons qui te poussent à faire ça, et que je les met en cause.

    1/ lorsque l'OS alloue de la mémoire, il alloue de la mémoire virtuelle : il effectue une collecte des blocs de mémoire physique libre, et affecte à ces blocs une adresse virtuelle de manière a donner l'impression que cette mémoire est contigue - ce qui n'est que très rarement le cas. Du coup, tu peux tout a fait te retrouver avec 256 Mo de mémoire virtuelle entre deux programmes qui, au niveau physique, sont cote à cote voire entremêlé.

    2/ un processus n'a pas le droit d'accéder à une zone de mémoire virtuelle qui ne lui appartient pas, sauf a ce que le créateur de cette zone en décide autrement. Du coup, que deux programmes soient espacés de 5 octets, 5k ou 256 MB ne change rien : leurs zones de mémoire virtuelle respectives sont privées, et tu ne peux pas avoir d'overlap sans que celà ne provoque une exception (access violation sous Windows, segmentation fault sous Unix).

    3/ c'est à l'OS de décider de ce genre de chose, parce que c'est lui qui gère la mémoire de tous les processus. S'il te venait l'idée de gérér la mémoire à sa place et en dehors du kernel, il faudrait que tu puisses faire tous les choix à sa place, et donc que tu ais l'accès à toute la mémoire, ce qui empêche la segmentation et rends les choses beaucoup beaucoup plus difficile à maintenir. Sous Windows, tu ne peux peux rien changer. Sous Linux, tu as la possibilité de modifier l'un des allocateurs (SLOB, SLAB ou SLUB) pour obtenir l'effet souhaité. Je ne suis pas sûr que ça soit une bonne chose (beaucoup de travail pour 0 gain).
    [FAQ des forums][FAQ Développement 2D, 3D et Jeux][Si vous ne savez pas ou vous en êtes...]
    Essayez d'écrire clairement (c'est à dire avec des mots français complets). SMS est votre ennemi.
    Evitez les arguments inutiles - DirectMachin vs. OpenTruc ou G++ vs. Café. C'est dépassé tout ça.
    Et si vous êtes sages, vous aurez peut être vous aussi la chance de passer à la télé. Ou pas.

    Ce site contient un forum d'entraide gratuit. Il ne s'use que si l'on ne s'en sert pas.

  4. #4
    Nouveau candidat au Club
    Profil pro
    Inscrit en
    Juillet 2011
    Messages
    2
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2011
    Messages : 2
    Par défaut
    Bonjour à tous,

    merci d'avoir répondu à cette question et désolé du retard de ma réaction.
    On objectif n'était peut être pas très clair. Je ne suis pas expert en gestion mémoire donc je vais essayer de reformuler simplement mon besoin.

    J'ai plusieurs applications qui communiquent via un middleware via une shared memory (de ce que j'ai compris un fichier mappé en mémoire virtuelle de chaque processus de mes applications).

    Ce fichier partagé n'est mappé dans la mémoire virtuelle du processus que ors de l'allumage du middleware... à adresse fixe !! C'est là qu'est mon problème. Comme l'adresse et la taille de ce fichier mappé est dicté par le middleware, je n'ai d'autre choix pour mes applis que de tenter de fixer une zone communes de mes mémoires virtuelles vierge.

    Il s'avère que certaines de mes applis ont justement une DLL mappé en plein milieu de la zone qui m'intéresse. Aussi je pensais qu'il était possible de dire au linker de préserver une zone (c'est la solution la plus simple pour moi), soit de fixer la zone de mémoire virtuelle pour chaque DLL/stack/heap (amis là, c'est très fastidieux).

    Malheureusement je n'ai pas la main sur le middleware, je ne peux pas changer ce mode de fonctionnement étrange. Par contre j'ai la possibilité de fixer l'adresse de démarrage ainsi que la taille de ce fichier mappé via un fichier de configuration du middleware.

    Est ce un peu plus clair ?

Discussions similaires

  1. Mémoire virtuelle d'un processus
    Par mambo dans le forum Visual C++
    Réponses: 2
    Dernier message: 05/04/2007, 08h51
  2. Manque de mémoire virtuelle sur Win2000 pro
    Par annedjomo dans le forum Windows Serveur
    Réponses: 7
    Dernier message: 02/03/2005, 10h16
  3. mémoire virtuelle minimale insuffisante
    Par sempire dans le forum Windows XP
    Réponses: 16
    Dernier message: 15/10/2003, 17h29
  4. [Turbo Pascal] Limite de la mémoire virtuelle
    Par moon tiger dans le forum Turbo Pascal
    Réponses: 12
    Dernier message: 08/02/2003, 22h30
  5. Problème avec la mémoire virtuelle
    Par Anonymous dans le forum CORBA
    Réponses: 13
    Dernier message: 16/04/2002, 16h10

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo