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 :

remapper aux meme adresse


Sujet :

C

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    144
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2006
    Messages : 144
    Par défaut remapper aux meme adresse
    Bonjour,
    voila j'explique mon petit souci,
    je doit faire un allocateur mémoire dans la ram au lieu d'utiliser le "tas"
    j'utilise donc les fonction mmap et munmap
    j'ai fait une premiere version qui mappe une page_systeme et qui s'arrete quand
    la taille de la page est atteinte;
    Le probleme est dans la deuxieme version, dès que la taille de la page est atteinte
    je remmape en augmentant la taille du fichier mapper.
    Le probleme est que les anciennes adresses ne sont pas au meme endroit et donc quand l'utilisateur,"pour qui ma bibliotheque préchargée est transparente", se sert d'un pointeur qu'il avait alloué avant cette augmentation: Sa fait n'importe quoi!!!
    c'est logique vu que l'adresse dont il dispose ne correspond plus dans la memoire.

    Je ne voit pas comment faire pour que mes anciennes adresses soit toujours au bon endroit?

    voila le code de ma fonction augmentation
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
     
    void Augmentation(int entete,int taille){
    			void *nouveau=NULL;
    			int j=1,test;		
    			if(0 != munmap(ptr,TAILLE_FICHIER)) fail_with("taille maximale atteinte et erreur munmap",2);
     
    			while(TAS+entete+taille>j*getpagesize()) j=j+1;
     
    			print_debug_int("Augmentation de la taille du fichier de ",(j*getpagesize())-TAILLE_FICHIER);
    		    print_debug(" octets\n");
     
    			TAILLE_FICHIER=j*getpagesize();
     
    			test=lseek(fd,TAILLE_FICHIER,SEEK_SET);
     
    			if(-1 == test) fail_with("erreur lseek\n",3);
     
    			write(fd,'\0',1);
     
    			test=lseek(fd,0,SEEK_SET);
     
    			if(-1 == test) fail_with("erreur lseek\n",3);
     
    			nouveau=mmap(0,getpagesize()*j,PROT_READ | PROT_WRITE,MAP_SHARED,fd,0);
     
    			if( (void *)-1 == nouveau) fail_with("probleme mmap",3);
    			ptr=nouveau;
    }

    je précise que l'entete est une zone que je met devant chaque espace memoire

    merci d'avance a ceux qui peuvent m'éclairer

  2. #2
    Membre confirmé
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    144
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2006
    Messages : 144
    Par défaut
    je précise que les fonction qui commencent par print sont des equivalence des
    fonction habituelle d'affichage mais modifié pour qu'elle n'apelle pas malloc.
    De meme pour la fonction fail_with.

Discussions similaires

  1. Réponses: 2
    Dernier message: 19/03/2014, 20h29
  2. UDP: binder sur la meme adresse en local
    Par ikuzar dans le forum Réseau
    Réponses: 5
    Dernier message: 16/04/2011, 18h21
  3. envoi de mail multiple vers la meme adresse
    Par manu7607 dans le forum ASP.NET
    Réponses: 11
    Dernier message: 22/08/2009, 22h11
  4. Dataguard : Creer les datafile aux memes emplacements
    Par ZashOne dans le forum Administration
    Réponses: 3
    Dernier message: 22/06/2009, 09h50
  5. Réponses: 5
    Dernier message: 30/04/2007, 18h03

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