Télécharger
Téléchargez le code source sur github : Releases · gperftools/gperftools (github.com) Le téléchargement ici est https://github.com/gperftools/gperftools/releases/download/gperftools-2.9.1/gperftools-2.9.1.zip
compiler
Décompressez le package compressé, ouvrez le fichier de projet gperftools.sln avec VS, compilez-le dans une version finale et récupérez libtcmalloc_minimal.lib et libtcmalloc_minimal.dll dans le répertoire généré. Si vous ne souhaitez pas apporter de dll supplémentaires lors de la publication du programme , vous pouvez modifier le projet libtcmalloc_minimal en bibliothèque statique.
test
Créez un nouveau projet, configurez les propriétés du projet, ajoutez libtcmalloc_minimal.lib aux dépendances supplémentaires et forcez la référence de symbole à ajouter l'élément __tcmalloc, vous pouvez utiliser le malloc modifié et le nouveau pour demander de l'espace mémoire dans le projet.
Code de test simplifié :
#include <Windows.h>
#include <iostream>
#define COUNT 1000*1000
void func()
{
size_t j = 0;
for (size_t i = 0; i < COUNT; ++i)
{
if (j > 1001)
{
j = 0;
}
int* pInt = (int*)malloc(i * sizeof(int));
free(pInt);
}
}
void main()
{
DWORD tStart, tEnd;
tStart = GetTickCount();
func();
tEnd = GetTickCount();
printf("%lu\\n", tEnd - tStart);
getchar();
}
Comparaison des performances
Il faut 78 ms pour utiliser tcmalloc et 5078 ms pour utiliser malloc natif.