Vous ne trouvez pas de réponse à votre problème ? Alors posez la question dans le forum. Souvenez-vous qu'il n'y a jamais de question bête, mais rester dans l'ignorance parce que l'on n'ose pas poser une question, ça c'est une erreur !

VHEAP, MANIPULATION DU HEAP(MÉMOIRE VIRTUEL)


Information sur la source

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

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

  • 1

  • 2

  • 3

  • 4

  • 5

  • 6

  • 7

  • 8

  • 9

  • 10

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

Pour les "Membres Club", vous pouvez télécharger directement un fichier contenu dans le zip sans télécharger le zip en entier !

Télécharger le zip

Commentaires et avis

Aucun commentaire pour le moment.

Ajouter un commentaire



Nos sponsors

Sondage...

CalendriCode

Octobre 2008
LMMJVSD
  12345
6789101112
13141516171819
20212223242526
2728293031  

Consulter la suite du CalendriCode



Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel BAÏSE, 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
Temps d'éxécution de la page : 0,140 sec

Google Coop CodeS-SourceS Google Coop CodeS-SourceS


Certaines images présentes sur le site (notament certains avatars) sont issues des collections IconShock, donc si vous souhaitez utiliser ces icons vous devez les acheter, ne les copiez pas et ne utilisez pas dans vos sites et applications sans les avoir commandé.