Skip to content
GitLab
Menu
Projects
Groups
Snippets
Loading...
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Sign in
Toggle navigation
Menu
Open sidebar
Nadi Tomeh
SDA
Commits
e9382975
Commit
e9382975
authored
Sep 09, 2019
by
david
Browse files
Ajout d'une analyse de l'espace mémoire inutilisé
parent
c4eb46fc
Changes
7
Hide whitespace changes
Inline
Side-by-side
TP1/C/arraylist.c
View file @
e9382975
...
...
@@ -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
;
}
...
...
TP1/C/arraylist.h
View file @
e9382975
...
...
@@ -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.
...
...
TP1/C/main.c
View file @
e9382975
...
...
@@ -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
;
}
TP1/CPP/arraylist.hpp
View file @
e9382975
...
...
@@ -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
;
...
...
TP1/CPP/main.cpp
View file @
e9382975
...
...
@@ -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
;
}
TP1/Java/ArrayListProxy.java
View file @
e9382975
...
...
@@ -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.
...
...
TP1/Java/Main.java
View file @
e9382975
...
...
@@ -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"
);
}
}
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
.
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment