Pool mémoire

Page 1 sur 2 1, 2  Suivant

Voir le sujet précédent Voir le sujet suivant Aller en bas

Pool mémoire

Message par Timon le Jeu 20 Mar - 2:04

Bonjour,
Je vous propose un sujet sur lequel je me suis penché récemment et qui s'avère intéressant bien que simple.
Il s'agit de créer un pool mémoire. Qu'est-ce donc ?
C'est une large zone de mémoire qu'on alloue dans laquelle on va procéder nous-même aux allocations pour un type de donnée précis.
Il faut donc d'abord avoir un type de donnée que l'on va avoir à allouer plusieurs fois. Exemple :
Code:
typedef
struct
{
  int valeur;
}
Donnee;
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.

Maintenant, à votre avis, en quoi est-ce utile ?

Timon
Entier Naturel
Entier Naturel

Masculin
Nombre de messages : 61
Localisation : France
Réputation : 0
Points : 3628
Date d'inscription : 14/01/2008

Feuille de personnage
Capacité linguistique:
1000/1000  (1000/1000)

http://tm.timon.free.fr

Revenir en haut Aller en bas

Re: Pool mémoire

Message par Timon le Dim 23 Mar - 3:36

Ah, dommage... Ce sujet ne semble pas aussi intéressant/simple que je le pensais. Neutral

Timon
Entier Naturel
Entier Naturel

Masculin
Nombre de messages : 61
Localisation : France
Réputation : 0
Points : 3628
Date d'inscription : 14/01/2008

Feuille de personnage
Capacité linguistique:
1000/1000  (1000/1000)

http://tm.timon.free.fr

Revenir en haut Aller en bas

Re: Pool mémoire

Message par manianis le Dim 23 Mar - 13:07

Pourquoi vous êtes ci rapide pour juger le problème le C/C++ permet de redéfinir les fonctions d'allocation/de libération de mémoire new et delete. Donc c'est faisable. J'avais un livre qui traitait cela en Turbo C++ mais j'ai oublié où est-ce que je l'ai caché.

manianis
Nombre Réel
Nombre Réel

Masculin
Nombre de messages : 975
Localisation : Tunisie
Réputation : 4
Points : 3721
Date d'inscription : 11/10/2007

Feuille de personnage
Capacité linguistique:
999/1000  (999/1000)

http://manianis.sitesled.com/

Revenir en haut Aller en bas

Re: Pool mémoire

Message par Timon le Dim 23 Mar - 13:34

Je ne demande pas de solution ! Very Happy Je ne fais que proposer cela comme exercice.

Timon
Entier Naturel
Entier Naturel

Masculin
Nombre de messages : 61
Localisation : France
Réputation : 0
Points : 3628
Date d'inscription : 14/01/2008

Feuille de personnage
Capacité linguistique:
1000/1000  (1000/1000)

http://tm.timon.free.fr

Revenir en haut Aller en bas

Re: Pool mémoire

Message par methodiX le Dim 23 Mar - 16:11

Maintenant, à votre avis, en quoi est-ce utile ?

Bon à mon avis, ça sert comme une initiation à l'allocation dynamique de la mémoire. Ca peut se donner comme mini-projet: ré-implémentation des fonctions d'allocation ou désallocation de la mémoire.

non, Timon?

_________________
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)
_____
Cliquer ici: Voir les nouveaux messages depuis votre dernière visite
Cliquer ici: Astuce: Utiliser l'outil "Recherche" du forum
avatar
methodiX
Admin
Admin

Masculin
Nombre de messages : 1260
Localisation : Le couloir de l'école polytechnique de Tunis
Réputation : 68
Points : 4720
Date d'inscription : 22/03/2007

Feuille de personnage
Capacité linguistique:
1000/1000  (1000/1000)

Revenir en haut Aller en bas

Re: Pool mémoire

Message par Timon le Dim 23 Mar - 17:08

methodiX a écrit:Bon à mon avis, ça sert comme une initiation à l'allocation dynamique de la mémoire.
[...]
non, Timon?
En effet, mais heureusement, ça ne se limite pas qu'à ça ! Smile

Timon
Entier Naturel
Entier Naturel

Masculin
Nombre de messages : 61
Localisation : France
Réputation : 0
Points : 3628
Date d'inscription : 14/01/2008

Feuille de personnage
Capacité linguistique:
1000/1000  (1000/1000)

http://tm.timon.free.fr

Revenir en haut Aller en bas

Re: Pool mémoire

Message par methodiX le Dim 23 Mar - 19:22

De plus, on peut gagner la gestion personnalisée de la mémoire Smile
Protéger ses propres zones, partage et swap de mémoire ...

_________________
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)
_____
Cliquer ici: Voir les nouveaux messages depuis votre dernière visite
Cliquer ici: Astuce: Utiliser l'outil "Recherche" du forum
avatar
methodiX
Admin
Admin

Masculin
Nombre de messages : 1260
Localisation : Le couloir de l'école polytechnique de Tunis
Réputation : 68
Points : 4720
Date d'inscription : 22/03/2007

Feuille de personnage
Capacité linguistique:
1000/1000  (1000/1000)

Revenir en haut Aller en bas

Re: Pool mémoire

Message par Timon le Lun 24 Mar - 1:38

methodiX a écrit:De plus, on peut gagner la gestion personnalisée de la mémoire Smile
Oui, on y gagne par exemple lorsque l'on sait dès le départ combien de données maximum seront allouées à tout instant. Grâce au pool mémoire, on est alors certain que l'allocation réussira. Bien entendu, si on n'en a aucune idée, l'allocation réussira seulement tant que le pool ne sera pas plein.
De plus, il n'y a pas de risque de fragmentation puisque toutes les données ont dans le pool (en général) la même taille. On utilise donc cette zone mémoire au mieux.
Enfin, on profite aussi d'une allocation quasiment instantanée puisqu'on sait précisément (ou presque) où il y a de la place.

Timon
Entier Naturel
Entier Naturel

Masculin
Nombre de messages : 61
Localisation : France
Réputation : 0
Points : 3628
Date d'inscription : 14/01/2008

Feuille de personnage
Capacité linguistique:
1000/1000  (1000/1000)

http://tm.timon.free.fr

Revenir en haut Aller en bas

Re: Pool mémoire

Message par Napoléon le Lun 24 Mar - 16:16

Salut Timon:
L'idée m'a beaucoup plu. Cependant, l'histoire de la fragmentation de la mémoire n'a pas été bien abordée. On sera toujours face à un problème de réorganisation de la mémoire, si on fait plusieurs allocations/désallocations de variables dynamiques dans le pool.

non?

_________________
Nabil - tunis
خير الناس أنفعهم للناس
avatar
Napoléon
Admin
Admin

Masculin
Nombre de messages : 2934
Localisation : Tunisie
Réputation : 122
Points : 5338
Date d'inscription : 19/03/2007

Feuille de personnage
Capacité linguistique:
999/1000  (999/1000)

http://infomath.online-talk.net

Revenir en haut Aller en bas

Re: Pool mémoire

Message par Timon le Lun 24 Mar - 17:43

Il ne peut pas y avoir fragmentation puisqu'on n'admet l'allocation que d'un type de donnée.
On pourrait considérer qu'il y a fragmentation si on cherche à allouer des tableaux. Or, le pool mémoire n'est pas adapté pour ça. Il me semble que l'on parle sinon de memory chunk.

Timon
Entier Naturel
Entier Naturel

Masculin
Nombre de messages : 61
Localisation : France
Réputation : 0
Points : 3628
Date d'inscription : 14/01/2008

Feuille de personnage
Capacité linguistique:
1000/1000  (1000/1000)

http://tm.timon.free.fr

Revenir en haut Aller en bas

Re: Pool mémoire

Message par Napoléon le Lun 24 Mar - 19:08

Qu'appelles-tu "Type de donnée" ? Donner des exemples pour qu'on puisse parler le même langage.

_________________
Nabil - tunis
خير الناس أنفعهم للناس
avatar
Napoléon
Admin
Admin

Masculin
Nombre de messages : 2934
Localisation : Tunisie
Réputation : 122
Points : 5338
Date d'inscription : 19/03/2007

Feuille de personnage
Capacité linguistique:
999/1000  (999/1000)

http://infomath.online-talk.net

Revenir en haut Aller en bas

Re: Pool mémoire

Message par Timon le Lun 24 Mar - 19:27

nabiL a écrit:Qu'appelles-tu "Type de donnée" ? Donner des exemples pour qu'on puisse parler le même langage.
J'en ai déjà donné un. Wink
Code:
typedef
struct
{
  int valeur;
}
Donnee;
Le pool mémoire ne contiendra que des objets Donnee.

Timon
Entier Naturel
Entier Naturel

Masculin
Nombre de messages : 61
Localisation : France
Réputation : 0
Points : 3628
Date d'inscription : 14/01/2008

Feuille de personnage
Capacité linguistique:
1000/1000  (1000/1000)

http://tm.timon.free.fr

Revenir en haut Aller en bas

Re: Pool mémoire

Message par manianis le Mar 25 Mar - 23:16

Et le code ? Ou est-ce qu'il est dans tout cela ?

manianis
Nombre Réel
Nombre Réel

Masculin
Nombre de messages : 975
Localisation : Tunisie
Réputation : 4
Points : 3721
Date d'inscription : 11/10/2007

Feuille de personnage
Capacité linguistique:
999/1000  (999/1000)

http://manianis.sitesled.com/

Revenir en haut Aller en bas

Re: Pool mémoire

Message par methodiX le Mar 25 Mar - 23:19

Quel code manianis?

Timon: int valeur ==> pour stocker quoi? une @mémoire? J'ai pas bien digéré l'histoire. Je suis un peu loin de l'informatique!

_________________
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)
_____
Cliquer ici: Voir les nouveaux messages depuis votre dernière visite
Cliquer ici: Astuce: Utiliser l'outil "Recherche" du forum
avatar
methodiX
Admin
Admin

Masculin
Nombre de messages : 1260
Localisation : Le couloir de l'école polytechnique de Tunis
Réputation : 68
Points : 4720
Date d'inscription : 22/03/2007

Feuille de personnage
Capacité linguistique:
1000/1000  (1000/1000)

Revenir en haut Aller en bas

Re: Pool mémoire

Message par Timon le Mar 25 Mar - 23:31

methodiX a écrit:Timon: int valeur ==> pour stocker quoi? une @mémoire? J'ai pas bien digéré l'histoire. Je suis un peu loin de l'informatique!
C'est un exemple.
J'aurais pu mettre autre chose. Par exemple, simplement :
Code:
typedef int Donnee;
voire indiquer que la donnée est d'un tout autre type !
Ce qu'est Donnee, on s'en fiche. C'est l'objet lui-même qui importe.
L'objectif est de donner au fur et à mesure des objets de ce type à l'appelant, tant que le pool mémoire le permet.

Timon
Entier Naturel
Entier Naturel

Masculin
Nombre de messages : 61
Localisation : France
Réputation : 0
Points : 3628
Date d'inscription : 14/01/2008

Feuille de personnage
Capacité linguistique:
1000/1000  (1000/1000)

http://tm.timon.free.fr

Revenir en haut Aller en bas

Re: Pool mémoire

Message par methodiX le Mar 25 Mar - 23:49

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)
_____
Cliquer ici: Voir les nouveaux messages depuis votre dernière visite
Cliquer ici: Astuce: Utiliser l'outil "Recherche" du forum
avatar
methodiX
Admin
Admin

Masculin
Nombre de messages : 1260
Localisation : Le couloir de l'école polytechnique de Tunis
Réputation : 68
Points : 4720
Date d'inscription : 22/03/2007

Feuille de personnage
Capacité linguistique:
1000/1000  (1000/1000)

Revenir en haut Aller en bas

Re: Pool mémoire

Message par manianis le Mer 26 Mar - 0:06

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
Nombre Réel
Nombre Réel

Masculin
Nombre de messages : 975
Localisation : Tunisie
Réputation : 4
Points : 3721
Date d'inscription : 11/10/2007

Feuille de personnage
Capacité linguistique:
999/1000  (999/1000)

http://manianis.sitesled.com/

Revenir en haut Aller en bas

Re: Pool mémoire

Message par Timon le Mer 26 Mar - 0:51

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.

Timon
Entier Naturel
Entier Naturel

Masculin
Nombre de messages : 61
Localisation : France
Réputation : 0
Points : 3628
Date d'inscription : 14/01/2008

Feuille de personnage
Capacité linguistique:
1000/1000  (1000/1000)

http://tm.timon.free.fr

Revenir en haut Aller en bas

Re: Pool mémoire

Message par manianis le Mer 26 Mar - 0:53

Merci, comme çà on avancera un pas.

manianis
Nombre Réel
Nombre Réel

Masculin
Nombre de messages : 975
Localisation : Tunisie
Réputation : 4
Points : 3721
Date d'inscription : 11/10/2007

Feuille de personnage
Capacité linguistique:
999/1000  (999/1000)

http://manianis.sitesled.com/

Revenir en haut Aller en bas

Re: Pool mémoire

Message par Timon le Mer 26 Mar - 1:09

Bien, je reprend l'exemple original de la donnée à allouer :
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é. Smile

Timon
Entier Naturel
Entier Naturel

Masculin
Nombre de messages : 61
Localisation : France
Réputation : 0
Points : 3628
Date d'inscription : 14/01/2008

Feuille de personnage
Capacité linguistique:
1000/1000  (1000/1000)

http://tm.timon.free.fr

Revenir en haut Aller en bas

Re: Pool mémoire

Message par Napoléon le Mer 26 Mar - 11:04

Pourquoi tu travailles uniquement avec des objets Donnees ?

_________________
Nabil - tunis
خير الناس أنفعهم للناس
avatar
Napoléon
Admin
Admin

Masculin
Nombre de messages : 2934
Localisation : Tunisie
Réputation : 122
Points : 5338
Date d'inscription : 19/03/2007

Feuille de personnage
Capacité linguistique:
999/1000  (999/1000)

http://infomath.online-talk.net

Revenir en haut Aller en bas

Re: Pool mémoire

Message par Timon le Mer 26 Mar - 11:28

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
Entier Naturel
Entier Naturel

Masculin
Nombre de messages : 61
Localisation : France
Réputation : 0
Points : 3628
Date d'inscription : 14/01/2008

Feuille de personnage
Capacité linguistique:
1000/1000  (1000/1000)

http://tm.timon.free.fr

Revenir en haut Aller en bas

Re: Pool mémoire

Message par methodiX le Jeu 27 Mar - 0:28

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)
_____
Cliquer ici: Voir les nouveaux messages depuis votre dernière visite
Cliquer ici: Astuce: Utiliser l'outil "Recherche" du forum
avatar
methodiX
Admin
Admin

Masculin
Nombre de messages : 1260
Localisation : Le couloir de l'école polytechnique de Tunis
Réputation : 68
Points : 4720
Date d'inscription : 22/03/2007

Feuille de personnage
Capacité linguistique:
1000/1000  (1000/1000)

Revenir en haut Aller en bas

Re: Pool mémoire

Message par Timon le Jeu 27 Mar - 0:53

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
Entier Naturel
Entier Naturel

Masculin
Nombre de messages : 61
Localisation : France
Réputation : 0
Points : 3628
Date d'inscription : 14/01/2008

Feuille de personnage
Capacité linguistique:
1000/1000  (1000/1000)

http://tm.timon.free.fr

Revenir en haut Aller en bas

Re: Pool mémoire

Message par Napoléon le Jeu 27 Mar - 10:38

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 ...

Smile

_________________
Nabil - tunis
خير الناس أنفعهم للناس
avatar
Napoléon
Admin
Admin

Masculin
Nombre de messages : 2934
Localisation : Tunisie
Réputation : 122
Points : 5338
Date d'inscription : 19/03/2007

Feuille de personnage
Capacité linguistique:
999/1000  (999/1000)

http://infomath.online-talk.net

Revenir en haut Aller en bas

Re: Pool mémoire

Message par Contenu sponsorisé


Contenu sponsorisé


Revenir en haut Aller en bas

Page 1 sur 2 1, 2  Suivant

Voir le sujet précédent Voir le sujet suivant Revenir en haut

- Sujets similaires

 
Permission de ce forum:
Vous ne pouvez pas répondre aux sujets dans ce forum