Skip to content
Snippets Groups Projects
Commit e9382975 authored by david's avatar david
Browse files

Ajout d'une analyse de l'espace mémoire inutilisé

parent c4eb46fc
No related branches found
No related tags found
No related merge requests found
......@@ -51,10 +51,14 @@ int arraylist_get(arraylist_t * a, int pos){
return -1;
}
size_t arraylist_get_size(arraylist_t * a){
size_t arraylist_size(arraylist_t * a){
return ( a!=NULL) ? a->size : -1;
}
size_t arraylist_capacity(arraylist_t * a){
return ( a!=NULL) ? a->capacity : -1;
}
char arraylist_do_we_need_to_enlarge_capacity(arraylist_t * a){
return ( a->size >= (a->capacity * 3)/4 )? TRUE: FALSE;
}
......
......@@ -70,7 +70,15 @@ int arraylist_get(arraylist_t * a, int pos);
@param a est un pointeur vers un tableau.
@returns le nombre d'éléments stockés dans le tableau.
*/
size_t arraylist_get_size(arraylist_t * a);
size_t arraylist_size(arraylist_t * a);
/**
Renvoie la capacité de stockage du tableau.
Complexité en temps/espace, pire cas : O(1)
@param a est un pointeur vers un tableau.
@returns la capacité de stockage du tableau.
*/
size_t arraylist_capacity(arraylist_t * a);
/**
Cette fonction détermine la règle selon laquelle un espace mémoire plus grand sera alloué ou non.
......
......@@ -12,7 +12,9 @@ int main(int argc, char ** argv){
// Analyse du temps pris par les opérations.
analyzer_t * time_analysis = analyzer_create();
// Analyse du nombre de copies faites par les opérations.
analyzer_t * copy_analysis = analyzer_create();
analyzer_t * copy_analysis = analyzer_create();
// Analyse de l'espace mémoire inutilisé.
analyzer_t * memory_analysis = analyzer_create();
struct timespec before, after;
// utilisé comme booléen pour savoir si une allocation a été effectuée.
char memory_allocation;
......@@ -28,6 +30,8 @@ int main(int argc, char ** argv){
// Enregistrement du nombre de copies efféctuées par l'opération.
// S'il y a eu réallocation de mémoire, il a fallu recopier tout le tableau.
analyzer_append(copy_analysis, (memory_allocation)? i:1 );
// Enregistrement de l'espace mémoire non-utilisé.
analyzer_append(memory_analysis,arraylist_capacity(a)-arraylist_size(a));
}
// Affichage de quelques statistiques sur l'expérience.
......@@ -36,13 +40,15 @@ int main(int argc, char ** argv){
fprintf(stderr, "Variance: %lf\n", get_variance(time_analysis));
fprintf(stderr, "Standard deviation: %lf\n", get_standard_deviation(time_analysis));
// Sauvegarde les données de l'expérience: temps et nombre de copies effectuées par opération.
// Sauvegarde les données de l'expérience.
save_values(time_analysis, "../dynamic_array_time_c.plot");
save_values(copy_analysis, "../dynamic_array_copy_c.plot");
save_values(memory_analysis, "../dynamic_array_memory_c.plot");
// Nettoyage de la mémoire avant la sortie du programme
arraylist_destroy(a);
analyzer_destroy(time_analysis);
analyzer_destroy(copy_analysis);
analyzer_destroy(memory_analysis);
return EXIT_SUCCESS;
}
......@@ -71,8 +71,15 @@ public:
Complexité en temps/espace, pire cas : O(1)
@returns le nombre d'éléments stockés dans le tableau.
*/
const size_t get_size(){ return data.size(); }
const size_t size(){ return data.size(); }
/**
Renvoie la capacité de stockage du tableau.
Complexité en temps/espace, pire cas : O(1)
@returns le nombre d'éléments stockés dans le tableau.
*/
const size_t capacity(){ return data.capacity(); }
private:
// Vecteur contenant les données.
std::vector<P> data;
......
......@@ -13,6 +13,8 @@ int main(int argc, char ** argv){
Analyzer time_analysis;
// Analyse du nombre de copies faites par les opérations.
Analyzer copy_analysis;
// Analyse de l'espace mémoire inutilisé.
Analyzer memory_analysis;
struct timespec before, after;
// Booléen permettant de savoir si une allocation a été effectuée.
bool memory_allocation;
......@@ -28,6 +30,8 @@ int main(int argc, char ** argv){
// Enregistrement du nombre de copies efféctuées par l'opération.
// S'il y a eu réallocation de mémoire, il a fallu recopier tout le tableau.
copy_analysis.append( (memory_allocation)? i:1 );
// Enregistrement de l'espace mémoire non-utilisé.
memory_analysis.append( a.capacity() - a.size() );
}
// Affichage de quelques statistiques sur l'expérience.
......@@ -36,9 +40,10 @@ int main(int argc, char ** argv){
std::cerr<<"Variance :"<<time_analysis.get_variance()<<std::endl;
std::cerr<<"Standard deviation :"<<time_analysis.get_standard_deviation()<<std::endl;
// Sauvegarde les données de l'expérience: temps et nombre de copies effectuées par opération.
// Sauvegarde les données de l'expérience.
time_analysis.save_values("../dynamic_array_time_cpp.plot");
copy_analysis.save_values("../dynamic_array_copy_cpp.plot");
memory_analysis.save_values("../dynamic_array_memory_cpp.plot");
return 0;
}
......@@ -67,10 +67,19 @@ public class ArrayListProxy<T> {
Complexité en temps/espace, pire cas : O(1)
@returns le nombre d'éléments stockés dans le tableau.
*/
int get_size(){
int size(){
return data.size();
}
/**
Renvoie la capacité de stockage du tableau.
Complexité en temps/espace, pire cas : O(1)
@returns le nombre d'éléments stockés dans le tableau.
*/
int capacity(){
return capacity;
}
/**
Cette fonction détermine la règle selon laquelle un espace mémoire plus grand sera alloué ou non.
@returns true si le tableau doit être agrandi, false sinon.
......
......@@ -10,6 +10,8 @@ public class Main {
Analyzer time_analysis = new Analyzer();
// Analyse du nombre de copies faites par les opérations.
Analyzer copy_analysis = new Analyzer();
// Analyse de l'espace mémoire inutilisé.
Analyzer memory_analysis = new Analyzer();
long before, after;
// Booléen permettant de savoir si une allocation a été effectuée.
boolean memory_allocation;
......@@ -26,6 +28,8 @@ public class Main {
// Enregistrement du nombre de copies efféctuées par l'opération.
// S'il y a eu réallocation de mémoire, il a fallu recopier tout le tableau.
copy_analysis.append( (memory_allocation == true)? i: 1);
// Enregistrement de l'espace mémoire non-utilisé.
memory_analysis.append( a.capacity() - a.size() );
}
// Affichage de quelques statistiques sur l'expérience.
......@@ -37,6 +41,6 @@ public class Main {
// Sauvegarde les données de l'expérience: temps et nombre de copies effectuées par opération.
time_analysis.save_values("../dynamic_array_time_java.plot");
copy_analysis.save_values("../dynamic_array_copy_java.plot");
memory_analysis.save_values("../dynamic_array_memory_java.plot");
}
}
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment