begin process at 2012 05 28 07:19:27
  Trouver un code source :
 
dans
 
Accueil > Forum > 

C++ & C++ .NET

 > 

Base de données

 > 

Autre

 > 

Allocateur de Mémoire c++


Derniers messages déposésPoser une question dans le forum ou lancer une discussion

Allocateur de Mémoire c++

samedi 19 mai 2007 à 15:43:12 | Allocateur de Mémoire c++

kellyse

Bonjour à tous!
Actuellement avant la fin du mois , je dois finir ce devoir très important ( concernant mon dîplome) et comme je suis une débutante , j'aurai voulu qu'on m'explique sur ce cours! voilà
merci de votre compréhension !
J'ai vraiment besoin d'aide car je suis tout seule à faire ça et comme j'ai des autres cours à faire !
PS: J'ai bossais un peut actuellement sur ce cours et de + j'ai fais des commentaires pour mieux que vous comprenez le cours! j'aimerais savoir ce qui me manque?


[i]#include <iostream.h>
#include <string.h>
#include <stdio.h>
#include <stdlib.h>
#include <conio.h>

class Item
{
public:
Item()
{
cout<<'+';
}
virtual ~Item()
{
cout<<'-';
}
char afficheCarte;
int affiche();

};

typedef unsigned int Adresse;
typedef unsigned int Taille;

const Adresse NAA = UINT_MAX;


/*La classe Item représente les éléments de base contenus dans la zone
mémoire simulée; le type Adresse représentera les adresses dans cette zone
mémoire, et le type Taille sera utilisé lui pour représenter des quantités
de cet espace mémoire.Finalement, la constance NAA(=<<pas une adresse>>),
devant être utilisée pour représenter une adresse invalide(équivalent du NULL de c++).


2) Prototype et définissez la classe Mémoire , de sorte que:


-L'on puisse instancier 'une mémoire' en précisant à la construction
la taile de cette mémoie(Item étant l'unité de mesure).

-La zone de mémoire soit somilée par un tableau de taille fixe (d'Items), mais
alloué dynamiquement(voir les remarques ci-après pour l'allocation
et la libération dynamique de tableaux).Par ailleurs, l'utilisation de la classe
ne devra pas provoquer de fuite mémoire(i.e. toute la mémoire 'réelle'
allouée doit être restituée).

-La réservation d'une zone de la mémoire simulée par la classe
se fasse au moyen de la méthone:
Adresse alloue(Taille taille);
qui, pour autant que la mémoire à disposition le permette, réserve
une zone contigÜe de taille (taille),et retournera l'adresse de départ
de cette zone, ou NNA dans le cas ou la demande d'allocation ne peut être satisfaite.

-La libération d'une zone de la mémoire précedemment allouée se fasse au moyen
de la méthode:
void libere(Adresse adresse);

Dans le cas ou l'argument adresse est invalide(hors bornes), la méthode ne fera rien.

-L'on puisse dupliquer une instance de Mémoire, et travailler avec les deux copies de manière
indépendante.

Pour connaître à toute instant la disponibilité de la mémoire, et permettre une
libération de zone en ne précisant que son adresse , il est nécessaire
de mémoriser une information aditionnelle, représentant l'occupation de
la mémoire.

-Une technique (totalement prohibitive, mais simple à réaliser) pour cela consite
à disposer d'un (second) tableau d'entiers (appelé par la suite map), de même dimension
que la mémoire, et de l'utiliser pour <<cartographier>> la mémoire.

-map[i] indique quel est le statue de l'adresse i de la mémoire.
-la valeur 0 sera utilisée pour désigner une adresse libre
-une valeur m différent de 0 indiquera que la position mémoire correspondant
à l'adresse i est attribuée , et qu'elle l'à été lors de la mième réservation.

-Ainsi, lors d'une réservation, il suffira de chercher dans la 'carte'
une zone suffisamment grande non encore réservée, et lors d'une libération,
il suffira de marquer livre toutes les adresses (contigues) supérieurs ou égales
à celle précisée en argument , pour lesquelles le no de réservation est le même
que celui de l'adresse précisée.*/

//03)Ajouter à Mémoire la méthode

void afficheCarte(ostream& os, unsigned int nb);


//04: Tester finalement votre programme, en utilisant la fonction principale
//suivante(également fournie dans le fichier d'origine):


void main()
{
int Memoire;
cout << " Creaction de M1 : " ;

Memoire m1(20);
cout << endl;



Adresse a1 = m1.alloue(5); cout << " A1(5) =" <<a1<<endl;
Adresse a2 = m1.alloue(10; cout << " A2(10 =" <<a2<<endl;
Adresse a3 = m1.alloue(15); cout << " A3(15) =" <<a3<<endl;
Adresse a4 = m1.alloue(1); cout << " A4(1) =" <<a4<<endl;

m1.libere(a2);
cout <<endl<<"Etat de M1 :"<<endl;
m1.afficheCarte(cout,10);
{
cout << endl << "Duplication de M1 : " ;
Memoire m2(m1);cout << endl;

cout << " Liberation de M1("<<a1<<')'<< endl;
m1.libere(a1);

cout << " Liberation de M2("<<a3<<')'<< endl;
m2.libere(a3);

a2 = m1.alloue(2); cout << " A2(2)=<<a2<<endl;
a4 = m2.alloue(2); cout << " A4(2)=<<a4<<endl;

cout<<endl<<"Etat de M2 : " <<endl;
m2.afficheCarte(cout,10);
cout << endl <<"Destruction de M2 : " ;
}
cout << endl << "Etat de M1 : " << endl;
m1.afficheCarte(cout,10);
cout << endl << " Destruction de M1 : " ;
}[/i]


PS: Si une personne , connait le c++! J'aimerais qui me contacte actuellement car j'aimerai vraiment de l'aide merci bcp !
samedi 26 mai 2007 à 21:38:09 | Re : Allocateur de Mémoire c++

languebasque

j'ai le mem exercice si t'arrive a trouver la solution ecrit la merci beaucioup
samedi 26 mai 2007 à 22:13:29 | Re : Allocateur de Mémoire c++

The_Guardian

Salut,

Deja est-ce que tu comprends ce que l'on te demande ? es-tu bien au point sur les pointeurs par exemple ?
Ensuite je te conseille de faire par etape, l'allocation ca risque d'etre assez dur donc dans un premier temps fait la methode simple proposee. Et arrives-tu par exemple a afficher la taille de tous les blocs libres ?
Affiches-tu la carte correctement ?
Resouds ces petits problemes et ensuite tu peux t'attaquer au plus gros probleme.


===
dimanche 27 mai 2007 à 16:11:41 | Re : Allocateur de Mémoire c++

languebasque

salut

bon je crois que j'ai des connaissance en pointeur  est pour faire allouer la memoire dynamiquement

ce n'est pas ca le probleme

mais je sais pas comment definir la fonction alloue(Taille taille)

pour reserver la place dans la zone que j'ai allouée sous forme d'un tableau:

fixe de 100 item par exemple

class memoire

{

.......

memoire(item n)

{

taille=n;

 zone_memoire=new item[100];
}
mais pour la fonction membre alloue comment dois je reservé
la mmoire en item dans ce tableau de 100 etem
merci encore

dimanche 27 mai 2007 à 17:56:51 | Re : Allocateur de Mémoire c++

The_Guardian

Salut,

Pour ta fonction je pense que tu as une carte, c'est a dire une liste d'emplacements libres ou pas. Donc bon alors supposons que ta memoire soit constituee d'un tableau de 1000 items, initialement ta memoire va ressembler a un truc du genre
[etat=libre debut=0 n=1000]
ensuite tu alloues disons 100 blocs, a priori ca va faire ca
[etat=occupe debut=0 n=100] [etat=libre debut=100 n=900]
si tu realloues un bloc de 200 blocs apres, ca va faire ca
[etat=occupe debut=0 n=100] [etat=occupe debut=100 n=200] [etat=libre debut=300 n=700]
si tu desalloues le premier bloc, tu obtiens
[etat=libre debut=0 n=100] [etat=occupe debut=100 n=200] [etat=libre debut=300 n=700]
en desallouant le deuxieme bloc, voici ce que tu auras
[etat=libre debut=0 n=1000]

bon donc voila en gros le principe. ca va donner quoi du coup en algorithme ? un truc de ce genre la

allocation(taille t)
debut
  pourchaque bloc b de la liste faire
    si b.etat==libre et b.taille>=t alors
      le debut de b est attribue a l'application
      la fin de b est libre
      retourner le nouveau bloc alloue'
    finsi
  finpourchaque
  retourner erreur
fin

pour la desallocation c'est un peu different. d'abord tu dois retrouver le bloc qui a ete alloue, ca c'est pas forcement tres dur. puis, il te faut fusionner tous les blocs libres adjacents, car il ne faut pas fragmenter la memoire.

tu vois ?

===

lundi 28 mai 2007 à 10:52:52 | Re : Allocateur de Mémoire c++

kellyse

Bonjour à tous ! merci de m'avoir répondu!
j'ai un peu compris sur certaines choses , mais d'un coter j'ai pas trop compris comment faire et commençer (c'est ce qui me dérange vraiment ) !
je  sais pas , j'aurai voulue un exemple ! si cela existe ? merci beaucoup c'est très urgent
mardi 5 juin 2007 à 16:30:03 | Re : Allocateur de Mémoire c++

languebasque

bon j'ai essayé de commencer un peu mais je n'ai pas y arriver car je me bloque a la fonction void libere(adresse adresse)!
voila ce que j'ai fait:
class memoire{
typedef unsigned int Adresse;
typedef unsigned int Taille;
const Adresse NAA=UNIT_MAX;
Taille _taille;
Taille _hauteaur;
Item zone_memoire;
class Item{
public:
Item(){cout<<"+";}
virtual ~Item()
{
cout<<'-';};
public:
memoire(&memoire p);
memoire();
~memoire();
Adresse alloue(Taille taille);
void libere(Adresse adresse);
void afficheCarte(ostream & os, unsigned int nb);
};
memoire::memoire{
zone_memoire=new Item[1000];
_taille=1000;
_hauteur=0;
}
memoire::alloue(Taille taille)
{
if(taille>_taille){return NAA;//memoire insuffisante}
else{
for(int i=0;i<taille;i++) _hauteur++;
_taille=_taille-taille;
Adresse adr;
adr=hauteur-taille;
return adr;
}
}
void memoire::libere(Adresse adresse)
{
et la je sais pas comment faire?.............
mardi 5 juin 2007 à 17:44:17 | Re : Allocateur de Mémoire c++

kellyse

Merci beaucoup pour cette exemple ! je pense que sa m'aidera beaucoup et encore merci à vous tous ^^
mercredi 6 juin 2007 à 20:38:42 | Re : Allocateur de Mémoire c++

languebasque

merci a toi aussi si t'arrive a trouver quelque chose n'esite pas de le poster merci encore


Cette discussion est classée dans : adresse, zone, mémoire, cout, m1


Répondre à ce message

Sujets en rapport avec ce message

Mémoire partagée et pointeur [ par darsh99 ] Bonjour,J'essai de faire passer un tableau dynamique, un pointeur donc, d'un programme à un autre, l'adresse est bien passée et les champs non dynamiq Prob lecture adresse mémoire [ par xmaz57000 ] Voilà je viens de recevoir un ordinateur industriel qui dispose en standard de 8 entrées TOR.Malheureusement, il n'y a aucun driver qui permet de récu pointeur-mémoire [ par baby3378 ] bonjours à tous,Voila j'ai voulu créé un programme qui peut acceder à la mémoire grace aux pointuer, je m'explique:_un pointeur se place sur une adres Incrémentation qui passe de 4 en 4 [ par N3oPhyte ] Bonjour j'ai écrit ou plutot tenté d'écrire un petit programme qui fait un dump de la mémoiremalheureusement le pointeur principal 'adresse' passe de le contenu d'une case mémoire dont on connait son adresse [ par tahsgh ] Bonjour, pouvez vous me donnez un outil (commande Linux, code en C, code en assembleur...) qui permet d'extraire le contenu d'une case mémoire dont on Sauvegarder une adresse mémoire [ par gmorello ] Bonjour, voici mon problème:Dans mon code j'ai une fonction importer d'une dll (Je n'ai pas acces au source de cette dll) qui me détraque mes adresses buffer directx [ par mana ] bonjour, je travail avec des image dont l'adresse est un pointeur directx(dans la ram du pc , pas cette de la carte vidéo), mais l'accès a la mémoire pb ADO [ par mamag ] Bonjour,j'ai utilisé la librairie ADOLIB.h pour accéder à une base de données ACCESS. Je me suis basée sur des exemples que j'ai trouvé sur internet, Allocation de la mémoire et protection [ par bilaloch ] Bonjour à tous, J'aimerais connaître s'il y a un moyen de savoir si telle adresse de la mémoire vive est protegée, si telle adresse est vide et égalem Pb de mémoire:recherche de méthodes [ par alexandre7g ] Bonjour,Je programme en C++ sous VS2005.J'ai un pb d'allocation de ma table des méthodes (il me semble):lorsque j'appel un méthode depuis un pointeur


Nos sponsors


Sondage...

Comparez les prix

CalendriCode

Mai 2012
LMMJVSD
 123456
78910111213
14151617181920
21222324252627
28293031   

Consulter la suite du CalendriCode

A découvrir



 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 2,792 sec (3)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales