Vheap, manipulation du heap(mémoire virtuel)

Soyez le premier à donner votre avis sur cette source.

Vue 3 292 fois - Téléchargée 145 fois

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 / Exemple :


/**********************************************/
// ***  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

%
  • %*%*%*%*%*%*%

Codes Sources

A voir également

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.