Sunteți pe pagina 1din 21

Design Patterns

Memory patterns
Raliser par :
ABIDAR Lahcen Rcham Omar

Company LOGO

LOGO

Plan
Memory Patterns

Mmoire VS Pointeurs Smart pointer pattern Pool allocation pattern

Implmentation

www.themegallery.com

LOGO

Smart Pointer Pattern

Problmatique(Mmoire VS Pointeurs)

les pointeurs ne sont pas des objets, ils sont juste des donnes. les oprations primitives quon peut effectuer sur les pointeurs ne sont pas vrifies pour validit. nous sommes libres d'accder un pointeur mme si il n'a jamais t initialis ou aprs la mmoire vers lequel il pointe a t libr. Nous sommes galement libres de dtruire le pointeur sans librer la mmoire.

Memory Patterns

LOGO

Smart Pointer Pattern

Consquences(Mmoire VS Pointeurs)

Lassociation des objet laide des pointeurs est dficelle. Moine de contrle sur les pointeurs . Pas de vrification des pointeurs. Jaspage de la mmoire. Des perte de la mmoire qui n'est plus rfrenciable au systme.

Memory Patterns

LOGO

Smart Pointer Pattern

Exemple plus concret(Albert Einstein: If you can't explain it simply, you don't understand it) On suppose quon travail dans un grand organisme avec un logiciel dvelopper avec (C++ par exemple) en utilisant les pointeurs, Le logiciel a un problme, il dtruit des pointeurs sans dtruire les mmoires associer, Aprs un nombre donn des opration avec le logiciel, le pc se ralentie, et il devient impossible douvrir une autre fentre, On ferme le logiciel mais le pc reste bloquer On se rendre dans la fameuse GESTION DES TACHES on trouve la mmoire inactif 8% et les autres mmoire sont presque 0%,et les processus sont aussi suspendu (Libre).

Cest quoi le problme?


Memory Patterns

LOGO

Smart Pointer Pattern

Les pointeurs qui sont dtruite laissent des bloques des

mmoires inaccessible ni par le systme, ni par le logiciel. Aprs un certaines temps la RAM ne support plus les donnes.

Solution 1: redmarrer le pc 100 fois par jours !!!!!!!


Solution 2: refaire lapplication on utilisant le Smart Design Pattern ou les pointeurs intelligents

Memory Patterns

LOGO

Smart Pointer Pattern

Patterns la structure simple de Memory ce modle

LOGO

Smart Pointer Pattern

Implimentation dengereuse class Nothing { public: Nothing() { cout << "ctor\\n"; } ~Nothing() { cout << "dtor\\n"; } void SaySomething() { cout << "Something\\n"; } }; Premirement en considre cette fonction: void TestNothing() { Nothing \*myNothing = new Nothing(); myNothing->SaySomething(); }

Le rsultat de programme qui fait appeler la fonction est: ctor Something


Memory Patterns

LOGO

Smart Pointer Pattern

Maintenant on va utiliser SuperSmartPointer:

void TestNothing() { Nothing \*myNothing = new Nothing(); SuperSmartPointer<Nothing> mySmartNothing(myNothing); mySmartNothing->SaySomething(); }

ctor Something dtor

Memory Patterns

LOGO

Pool Allocation Pattern

Le systme prototype candidat pour le PAP

Ne peut pas faire face des questions dallocation dynamique de mmoire.

Trop complexe pour permettre une allocation statique de tous les objets.

Memory Patterns

LOGO

Pool Allocation Pattern

Structure de pattern

Memory Patterns

LOGO

Pool Allocation Pattern

Structure de pattern

Tout objet dans le systme qui a besoin dutiliser un ou plusieurs objets de la classe RessourceClass

Memory Patterns

LOGO

Pool Allocation Pattern

Structure de pattern

-pooledClass: Spcifier la classe dobjets mise en commun. -BufferSize: Spcifier le nombre dentre eux crer.

Memory Patterns

LOGO

Pool Allocation Pattern

Structure de pattern

Paramtre formel de la classe Generic Pool Manager

Memory Patterns

LOGO

Pool Allocation Pattern

Structure de pattern

RessourceClass+ un certain nombre dobjets(size) sont passs comme paramtres rels.

Memory Patterns

LOGO

Pool Allocation Pattern


Consquences
1
2 3
La mmoire est allou au dmarrage et jamais effac.
Aucun problme de synchronisation de lallocation dynamique de mmoire pendant l'excution ou la fragmentation de la mmoire.

Evite la fragmentation et les frais gnraux d'excution pour l'allocation d'objets.

Memory Patterns

LOGO

Pool Allocation Pattern

Implmentation import java.util.*; class BusMessage { private String s; }; class PoolEmpty extends Exception { }; public class BusMessagePool{ private LinkedList freeList = new LinkedList();

Memory Patterns

LOGO

Pool Allocation Pattern

Implmentation

public BusMessagePool() { for (int j=0; j<1000; j++) freeList.addLast(new BusMessage());

};

Memory Patterns

LOGO

Pool Allocation Pattern

Implmentation public BusMessage allocate() throws PoolEmpty { BusMessage B; if (freeList.size() > 0) { B = (BusMessage) freeList.getFirst(); freeList.removeFirst(); return B; } else { throw new PoolEmpty(); }; };
Memory Patterns

LOGO

Pool Allocation Pattern

Implmentation

public void release(BusMessage Carcass) { freeList.addFirst(Carcass); }; }

Memory Patterns

Company LOGO

S-ar putea să vă placă și