begin process at 2010 02 10 05:03:49
  Trouver un code source :
 
dans
 
Accueil > 

Code

 > 

Divers

 > VHEAP, MANIPULATION DU HEAP(MÉMOIRE VIRTUEL)

VHEAP, MANIPULATION DU HEAP(MÉMOIRE VIRTUEL)


 Information sur la source

Note :
6 / 10 - par 1 personne
6,00 / 10

  • 1

  • 2

  • 3

  • 4

  • 5

  • 6

  • 7

  • 8

  • 9

  • 10
Catégorie :Divers Niveau :Initié Date de création :19/10/2003 Vu / téléchargé :1 878 / 97

Auteur : vObjects

Ecrire un message privé
Commentaire sur cette source (0)
Ajouter un commentaire et/ou une note

 Description

Class permettant de manipuler le heap.
En regardant l'exemple c'est plus simple à comprendre.

Du début à la fin:
on réserve de l'espace dans le heap(par défaut, dans la class, 2 octets sont réservés)
alloue de l'espace dans notre espace réservé(la taille que vous voulez)
vous faite ce que vous voulez avec cette espace, copie, déplacer, supprimer, etc ... etc ... tout comme un char* par exemple.
*** action optionnelle ***
libère l'espace dans le heap
détruit le heap
*** action optionnelle ***

l'espace maximum que vous pouvez réserver dans le heap est l'espace non utilisé(non réservé) dans la mémoire virtuel(pagefile/virtual memory/swap/...)

Source

  • /**********************************************/
  • // *** Fichier main.cpp
  • /**********************************************/
  • #include <iostream>
  • using namespace std;
  • #include "vheap.h"
  • int main() {
  • vHeap heap; // lors de la construction de notre objet, 2 octets nous sont reserve
  • // dans le heap
  • cout << "*** Debut Du Programme ***" << endl << endl;
  • if ( heap.Handle() <= 0 ) { // Si notre espace dans le heap n'a pas pu être reserve
  • cout << "Erreur lors de la reservation d'espace dans le heap" << endl << endl;
  • return 0; // Quitte le programme
  • }
  • if ( heap.Alloc(12) != VHEAP_NO_ERROR ) {
  • cout << "Erreur lors de l'assignation d'espace dans le heap" << endl << endl;
  • return 0; // Quitte le programme
  • }
  • cout << "Reservation de 12 octets dans le heap reussi" << endl;
  • cout << "Taille de l'espace reserve: " << heap.SizeOfPtr() << endl;
  • // Récupère le pointeur dans le heap
  • char* ptr = reinterpret_cast<char*>(heap.Ptr());
  • if ( ptr == NULL ) {
  • cout << "Erreur lors de la recuperation du pointeur dans le heap" << endl << endl;
  • return 0;
  • }
  • cout << "Copie des caracteres dans notre espace" << endl << endl;
  • memset(ptr, 0, 12);
  • memcpy(ptr, "vObjects", 8);
  • cout << "Contenue de notre heap: " << ptr << endl;
  • cout << "Reassignation de memoire" << endl << endl;
  • if ( heap.ReAlloc(1024) != VHEAP_NO_ERROR ) {
  • cout << "Erreur lors de la reassignation" << endl << endl;
  • return 0;
  • }
  • // Récupère le pointeur dans le heap
  • ptr = reinterpret_cast<char*>(heap.Ptr());
  • if ( ptr == NULL ) {
  • cout << "Erreur lors de la recuperation du pointeur dans le heap" << endl << endl;
  • return 0;
  • }
  • cout << "Taille de l'espace apres reassignation: " << heap.SizeOfPtr() << endl << endl;
  • cout << "Copie des caracteres dans notre espace" << endl;
  • memset(ptr, 0, 1024);
  • memset(ptr, '*', 1023);
  • cout << "Voici ce que l'on vient tout juste de copier dans le heap" << endl << endl;
  • cout << " | " << ptr << " | " << endl << endl;
  • heap.Free();
  • cout << "L'espace dans le heap que nous avions reserve est maintenant libere" << endl << endl;
  • heap.DestroyHeap();
  • cout << "L'objet heap est maintenant detruit" << endl << endl;
  • cout << endl << "*** Fin Du Programme ***" << endl << endl;
  • return 0;
  • }
/**********************************************/
// ***  Fichier main.cpp
/**********************************************/
#include <iostream>
using namespace std;
#include "vheap.h"

int main() {

vHeap heap;  // lors de la construction de notre objet, 2 octets nous sont reserve
		 // dans le heap

	cout << "*** Debut Du Programme ***" << endl << endl;

	if ( heap.Handle() <= 0 ) { // Si notre espace dans le heap n'a pas pu être reserve
		cout << "Erreur lors de la reservation d'espace dans le heap" << endl << endl;
		return 0; // Quitte le programme
	}

	if ( heap.Alloc(12) != VHEAP_NO_ERROR ) {
		cout << "Erreur lors de l'assignation d'espace dans le heap" << endl << endl;
		return 0; // Quitte le programme
	}

	cout << "Reservation de 12 octets dans le heap reussi" << endl;
	cout << "Taille de l'espace reserve: " << heap.SizeOfPtr() << endl;
	// Récupère le pointeur dans le heap
	char* ptr = reinterpret_cast<char*>(heap.Ptr());

	if ( ptr == NULL ) {
		cout << "Erreur lors de la recuperation du pointeur dans le heap" << endl << endl;
		return 0;
	}

	cout << "Copie des caracteres dans notre espace" << endl << endl;
	memset(ptr, 0, 12);
	memcpy(ptr, "vObjects", 8);
	cout << "Contenue de notre heap: " << ptr << endl;

	cout << "Reassignation de memoire" << endl << endl;
	if ( heap.ReAlloc(1024) != VHEAP_NO_ERROR ) {
		cout << "Erreur lors de la reassignation" << endl << endl;
		return 0;
	}
	

	// Récupère le pointeur dans le heap
	ptr = reinterpret_cast<char*>(heap.Ptr());

	if ( ptr == NULL ) {
		cout << "Erreur lors de la recuperation du pointeur dans le heap" << endl << endl;
		return 0;
	}

	cout << "Taille de l'espace apres reassignation: " << heap.SizeOfPtr() << endl << endl;
	cout << "Copie des caracteres dans notre espace" << endl;
	memset(ptr, 0, 1024);
	memset(ptr, '*', 1023);

	cout << "Voici ce que l'on vient tout juste de copier dans le heap" << endl << endl;

	cout << " | " << ptr << " | " << endl << endl;

	heap.Free();
	cout << "L'espace dans le heap que nous avions reserve est maintenant libere" << endl << endl;
	
	heap.DestroyHeap();
	cout << "L'objet heap est maintenant detruit" << endl << endl;
	
	cout << endl << "***  Fin Du Programme ***" << endl << endl;

	return 0;

}


 Conclusion

Créé et testé avec VC++ 6 sous Windows 2000 Pro seulement.



*%*%*%*%*%*%*%
%
* vObjects
%
*%*%*%*%*%*%*%

 Fichier Zip

Les Membres Club peuvent télécharger directement un fichier contenu dans le zip sans télécharger le zip en entier !

Télécharger le zip


 Sources du même auteur

Source avec Zip Source avec une capture ORDONNER UN TABLEAU DE CHAR*, INT, DOUBLE, LONG, ETC ...

 Sources de la même categorie

Source avec Zip CALLOCATOR par troctsch
Source avec Zip HEAPCOLLECTOR par troctsch
Source avec Zip GÉNÉRE UN TABLEAU DE CARACTÉRE AU FORMAT C CONTENANT LE BYTE... par kertimanoff
FRACTIONS EGYPTIENNES par lptm974
BITOPERATOR par FrancoisGauthier

Commentaires et avis

Aucun commentaire pour le moment.

 Ajouter un commentaire




Nos sponsors


Sondage...

CalendriCode

Février 2010
LMMJVSD
1234567
891011121314
15161718192021
22232425262728

Consulter la suite du CalendriCode

 
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 : 0,546 sec (4)

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