Pool mémoire
Forum INFOMATH :: Enseignement de l'informatique :: INFO - Supérieur (Etudiants et Professionnels) :: C/C++
Page 2 sur 3•
Page 2 sur 3 •
1, 2, 3 
Re: Pool mémoire
Si on vous demande d'utiliser le pool de mémoire pour allouer de l'espace pour plusieurs variable V1, V2, ...., Vn, de tailles respectives t1, t2, ..., tn. Comment tu fais?
Sami - Methodix, tunis
Le génie de Newton a consisté à dire que la lune tombe alors que tout le monde voit bien qu'elle ne tombe pas.
(Paul Valéry)
Le génie de Newton a consisté à dire que la lune tombe alors que tout le monde voit bien qu'elle ne tombe pas.
(Paul Valéry)

methodiX- Admin


- Messages : 811
Inscrit le : 22 Mar 2007
Localisation : marsa - IPEST
Feuille de personnage
Capacité linguistique:


(1000/1000)
Re: Pool mémoire
Le but :
Que faire précisément ?
- Allouer un gros bloc de mémoire
- Le préparer pour qu'il soit prêt à accueillir plusieurs objets de type 'Donnee'
-
Construire une fonction qui y "alloue" un objet de type 'Donnee' et qui
renvoie son adresse ou NULL s'il n'y a plus de place dans le pool
- Construire une fonction qui "libère" un objet
- Enfin, construire une fonction qui libère le bloc de mémoire
Bien entendu, on peut produire quelques variantes mais c'est l'idée générale.
manianis- Admin


- Messages : 976
Inscrit le : 10 Oct 2007
Localisation : Tunisie
Feuille de personnage
Capacité linguistique:


(999/1000)
Re: Pool mémoire
Comme je l'ai déjà dit : le pool mémoire est surtout utilisé pour n'allouer qu'un seul et unique type de donnée. La taille de ce qu'il faut allouer ne peut pas varier. C'est ce qui le rend puissant.
Je crois qu'il va falloir que je donne les prototypes des fonctions publiques à construire pour rendre les choses plus claires.
Je crois qu'il va falloir que je donne les prototypes des fonctions publiques à construire pour rendre les choses plus claires.
Timon- Membre important


- Messages : 57
Inscrit le : 14 Jan 2008
Localisation : France
Feuille de personnage
Capacité linguistique:


(1000/1000)
Re: Pool mémoire
Merci, comme çà on avancera un pas.
manianis- Admin


- Messages : 976
Inscrit le : 10 Oct 2007
Localisation : Tunisie
Feuille de personnage
Capacité linguistique:


(999/1000)
Re: Pool mémoire
Bien, je reprend l'exemple original de la donnée à allouer :
Il nous faut donc un constructeur de pool :
Il construit un pool de nb_donnees objets de type Donnee. Il n'est pas nécessaire que l'appelant sache de quoi est composé le type Pool.
Il faut aussi un destructeur :
Le but de cette fonction est clair, je pense.
On aborde maintenant ce qui est intéressant :
qui renvoie l'adresse d'un seul objet de type Donnee ou NULL si le pool n'a plus de place.
permet au pool de considérer que cet objet n'est plus référencé par l'appelant. Il peut donc être "réalloué" lors d'un prochain appel de pool_allouer_donnee().
Comme vous le voyez, il n'y a rien de bien compliqué.
- Code:
typedef
struct
{
int valeur;
}
Donnee;
Il nous faut donc un constructeur de pool :
- Code:
Pool *pool_creer(size_t nb_donnees);
Il construit un pool de nb_donnees objets de type Donnee. Il n'est pas nécessaire que l'appelant sache de quoi est composé le type Pool.
Il faut aussi un destructeur :
- Code:
void pool_detruire(Pool *p_pool);
Le but de cette fonction est clair, je pense.
On aborde maintenant ce qui est intéressant :
- Code:
Donnee *pool_allouer_donnee(Pool *p_pool);
qui renvoie l'adresse d'un seul objet de type Donnee ou NULL si le pool n'a plus de place.
- Code:
void pool_liberer_donnee(Pool *p_pool, Donnee *p_donnee);
permet au pool de considérer que cet objet n'est plus référencé par l'appelant. Il peut donc être "réalloué" lors d'un prochain appel de pool_allouer_donnee().
Comme vous le voyez, il n'y a rien de bien compliqué.
Timon- Membre important


- Messages : 57
Inscrit le : 14 Jan 2008
Localisation : France
Feuille de personnage
Capacité linguistique:


(1000/1000)
Re: Pool mémoire
Pourquoi tu travailles uniquement avec des objets Donnees ?
Nabil - tunis
خير الناس أنفعهم للناس
خير الناس أنفعهم للناس

nabiL- Admin


- Messages : 1906
Inscrit le : 19 Mar 2007
Localisation : Tunisie
Feuille de personnage
Capacité linguistique:


(999/1000)
Re: Pool mémoire
nabiL a écrit:Pourquoi tu travailles uniquement avec des objets Donnees ?
Parce que le pool mémoire n'est fait que pour allouer des objets de même taille :
Wikipedia a écrit:Memory pools allow dynamic memory allocation comparable to malloc or C++'s operator new. As those implementations suffer from fragmentation because of variable block sizes, it can be impossible to use them in a real time system due to performance. A more efficient solution is preallocating a number of memory blocks with the same size called the memory pool.
Cela peut rendre la création et la destruction de listes chaînées, arbres, etc. plus rapides.
Timon- Membre important


- Messages : 57
Inscrit le : 14 Jan 2008
Localisation : France
Feuille de personnage
Capacité linguistique:


(1000/1000)
Re: Pool mémoire
Fixer la taille de Donnees et varier le nombre de variables de type Donnees cause de la fragmentation aussi.
Sami - Methodix, tunis
Le génie de Newton a consisté à dire que la lune tombe alors que tout le monde voit bien qu'elle ne tombe pas.
(Paul Valéry)
Le génie de Newton a consisté à dire que la lune tombe alors que tout le monde voit bien qu'elle ne tombe pas.
(Paul Valéry)

methodiX- Admin


- Messages : 811
Inscrit le : 22 Mar 2007
Localisation : marsa - IPEST
Feuille de personnage
Capacité linguistique:


(1000/1000)
Re: Pool mémoire
methodiX a écrit:Fixer la taille de Donnees et varier le nombre de variables de type Donnees cause de la fragmentation aussi.
Il ne peut pas y avoir fragmentation puisqu'on ne peut allouer qu'un élément à la fois.
Timon- Membre important


- Messages : 57
Inscrit le : 14 Jan 2008
Localisation : France
Feuille de personnage
Capacité linguistique:


(1000/1000)
Re: Pool mémoire
Ou bien
je n'ai pas bien lu (donc mal compris) la notion de Pool
Ou bien
tu n'as pas bien expliqué cette notion (ça m'étonne)
Ou bien
il y a quelques choses qui cloche ...

je n'ai pas bien lu (donc mal compris) la notion de Pool
Ou bien
tu n'as pas bien expliqué cette notion (ça m'étonne)
Ou bien
il y a quelques choses qui cloche ...
Nabil - tunis
خير الناس أنفعهم للناس
خير الناس أنفعهم للناس

nabiL- Admin


- Messages : 1906
Inscrit le : 19 Mar 2007
Localisation : Tunisie
Feuille de personnage
Capacité linguistique:


(999/1000)
Re: Pool mémoire
Prenons une forme simple du pool.
C'est un simple tableau d'objets Donnee. Il est déjà désigné en tant que tel.
On va "distribuer" ses éléments au fur et à mesure sans jamais en donner plus d'un à la fois.
C'est pour quoi il n'y a pas de risque de fragmentation : le nombre d'éléments qu'on peut allouer en tout dans le pool à tout instant reste le même et les "allocations" ne peuvent pas se faire n'importe où.
C'est un simple tableau d'objets Donnee. Il est déjà désigné en tant que tel.
On va "distribuer" ses éléments au fur et à mesure sans jamais en donner plus d'un à la fois.
C'est pour quoi il n'y a pas de risque de fragmentation : le nombre d'éléments qu'on peut allouer en tout dans le pool à tout instant reste le même et les "allocations" ne peuvent pas se faire n'importe où.
Timon- Membre important


- Messages : 57
Inscrit le : 14 Jan 2008
Localisation : France
Feuille de personnage
Capacité linguistique:


(1000/1000)
Re: Pool mémoire
A vrai dire, je ne vois pas ce qui ne vous paraît pas clair. 
Timon- Membre important


- Messages : 57
Inscrit le : 14 Jan 2008
Localisation : France
Feuille de personnage
Capacité linguistique:


(1000/1000)
Re: Pool mémoire
Je pense qu'il faut présenter l'information autrement... hélas j'ai pas le temps. Sinon, j'aurais fait plus d'effort pour reformuler l'énoncé sans paraphraser le texte biensûr.
Nabil - tunis
خير الناس أنفعهم للناس
خير الناس أنفعهم للناس

nabiL- Admin


- Messages : 1906
Inscrit le : 19 Mar 2007
Localisation : Tunisie
Feuille de personnage
Capacité linguistique:


(999/1000)
Re: Pool mémoire
Wikipedia a écrit:Memory pools allow dynamic memory allocation comparable to malloc or C++'s operator new. As those implementations suffer from fragmentation because of variable block sizes, it can be impossible to use them in a real time system due to performance. A more efficient solution is preallocating a number of memory blocks with the same size called the memory pool.
Pourtant c'est clair.
manianis- Admin


- Messages : 976
Inscrit le : 10 Oct 2007
Localisation : Tunisie
Feuille de personnage
Capacité linguistique:


(999/1000)
Re: Pool mémoire
C'est du texte concentré qui présente des idées très importante. Ca ne peut pas être décrit en quelques mots. Si j'aurais l'occasion de présenter ça un ensemble de personnes (des étudiants par exemple) j'aurai procédé autrement.
Nabil - tunis
خير الناس أنفعهم للناس
خير الناس أنفعهم للناس

nabiL- Admin


- Messages : 1906
Inscrit le : 19 Mar 2007
Localisation : Tunisie
Feuille de personnage
Capacité linguistique:


(999/1000)
Page 2 sur 3 •
1, 2, 3 


