exercice | ||
td | ||
tp | ||
.gitignore | ||
CMakeLists.txt | ||
LICENSE | ||
README.md | ||
run.bat | ||
run.sh |
Module C++ INSA 4AE
Compiler le projet
Préparer la compilation
Pour compiler le projet je recommande CMake, mais il est possible d'utiliser directement 'g++'/'gcc'. Une simple commande vous permet de préparer les fichiers dépendant de l'étape pour le td ou l'exercice :
mkdir build
cd build
cmake -DETAPE=2 -DTD=1 -DTP=1 ..
Dans cet exemple, l'étape 2 du dossier exercice, le td 1 du dossier td et le tp 1 du dossier tp seront construits.
Lancer la compilation
Il suffit ensuite de construire l'executable dans le dossier désiré
cmake --build . --target <target_name>
<target_name>
étant soittd_insa
,exercice_insa
outp_insa
Conseil pour compiler et executer efficacement
Je vous suggère d'aller dans le dossier contenant l'executable dès que les deux étapes sont réalisées. Il vous suffit ensuite de lancer le script .sh
ou .bat
pour à la fois compiler et executer le code.
Pour cela rendez vous à la racine du projet après avoir crée et préparer le build :
./run.sh <target_name>
Pour GNU GCC/G++ sur Linux
./run.bat <target_name>
Pour Powershell sur Windows
run.bat <target_name>
Pour CMD sur Windows
<target_name>
étant soittd_insa
,exercice_insa
outp_insa
Test des allocations entre la bibliothèque standard et mon implémentation
Voici le code testé :
std::vector<int> vectStd;
Vector<int> vectYoyo;
int capacityStd(0), capacityYoyo(0);
size_t tempCapacityStd(0), tempCapacityYoyo(0);
for(int i=0; i<15000; i++)
{
vectYoyo.PushBack(i);
vectStd.push_back(i);
if(tempCapacityStd != vectStd.capacity())
capacityStd++;
if(tempCapacityYoyo != vectYoyo.Capacity())
capacityYoyo++;
tempCapacityStd = vectStd.capacity();
tempCapacityYoyo = vectYoyo.Capacity();
}
std::cout << "Total Yoyo Reallocations: " << capacityYoyo << "\tFinal Capacity: " << tempCapacityYoyo << std::endl;
std::cout << "Total Std Reallocations: " << capacityStd << "\tFinal Capacity: " << tempCapacityStd << std::endl;
Avec le résultat :
Total Yoyo Reallocations: 15 Final Capacity: 16384
Total Std Reallocations: 25 Final Capacity: 18207
Mon implémentation possède donc moins de réallocations, ainsi qu'une capacité finale moins grande. (Par comparaison, une simple implémentation augmentant la capacité _capacity++
à chaque push_back()
aurait autant de réallocation que de capacité finale. Bien qu'une capacité finale moins élevée.)