How To Use TCMalloc?

29,555

Solution 1

I'll provide another answer since there's an easier way to install it than in the other answer:

Ubuntu already has a package for google perf tools: http://packages.ubuntu.com/search?keywords=google-perftools

By installing libgoogle-perftools-dev you should get all that is required for developing tcmalloc applications. As for how to actually use tcmalloc, see the other answer.

Solution 2

Install:

sudo apt-get install google-perftools

Create an application in eclipse or any other code composer

#include <iostream>
#include <unistd.h>
#include <vector>
#include <string>

using namespace std;

class BigNumber
{
public:

BigNumber(int i)
{
  cout << "BigNumber(" << i  << ")" << endl;
  digits = new char[100000];
}

~BigNumber()
{
  if (digits != NULL)
    delete[] digits;
}

private:

char* digits = NULL;

};

int main() {
  cout << "!!!Hello World!!!" << endl; // prints !!!Hello World!!!

  vector<BigNumber*> v;

  for(int i=0; i< 100; i++)
  {
    v.push_back(new BigNumber(i));
  }

  return 0;
}

This code will help you see how memory is leaking

Then add the library to your makefile

-ltcmalloc

when running the application, you want to create a heap file, so you need to add an environment variable HEAPPROFILE=/home/myuser/prefix and files prefix.0001.heap will be created in the /home/myuser path

Run the application and heap files will be created Examine heap files

pprof helloworld helloworld.0001.heap --text
Using local file helloworld.
Using local file helloworld.0001.heap.
Total: 9.5 MB
  9.5 100.0% 100.0%      9.5 100.0% BigNumber::BigNumber
  0.0   0.0% 100.0%      0.0   0.0% __GI__IO_file_doallocate

Easy to see which objects leaked and where were they allocated.

Solution 3

To install TCMalloc:

sudo apt-get install google-perftools

To replace allocators in system-wide manner I edit /etc/environment (or export from /etc/profile, /etc/profile.d/*.sh):

echo "LD_PRELOAD=/usr/lib/libtcmalloc.so.4" | tee -a /etc/environment

To do the same in more narrow scope you can edit ~/.profile, ~/.bashrc, /etc/bashrc, etc.

Solution 4

If you would like to use tcmalloc only just for allocated memory optimization, not for analysis, you can do like this:

sudo apt -y install libgoogle-perftools-dev

cc -O3 -ltcmalloc_minimal -fno-builtin-malloc \
 -fno-builtin-calloc -fno-builtin-realloc -fno-builtin-free -o main main.c

Solution 5

  1. tcmalloc is in the google perf tool, installation guide could be found here.
  2. The example is included in the google perf tool
  3. see here, section Performance Notes
Share:
29,555
sudo
Author by

sudo

Eager to learn new things.

Updated on October 13, 2021

Comments

  • sudo
    sudo over 2 years

    Firstly, I want to know how to install TCmalloc in Ubuntu. Then I need a program uses TCmalloc. Then I need a small program to show that TCmalloc is working better than PTmalloc.