How To Use TCMalloc?
Asked Answered
W

5

25

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.

Wyman answered 23/3, 2015 at 7:33 Comment(3)
What do you mean by "working better"? Smaller memory fragmentation? Faster performance? If it's performance, then it should be relatively easy to show that tcmalloc is better than ptmalloc, but if it's memory fragmentation it may be a bit harder.Ephor
In faster performance.Wyman
Related: #6261701Longo
S
17

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" | sudo tee -a /etc/environment

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

Sake answered 11/10, 2017 at 19:16 Comment(2)
My experience said, that only the firefox crashed, when TCMalloc is installed in system-wide manner. All other programms on Ubuntu 16.04 are totally happy with it.Sake
To get the compile tools as well, install: sudo apt-get install google-perftools libgoogle-perftools-devBags
E
11

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.

Ephor answered 23/3, 2015 at 8:53 Comment(0)
M
6

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.

Mortal answered 13/3, 2018 at 11:28 Comment(1)
Some notes: (1) use export to set the variable. (2) if it's set properly the program will print "Starting tracking the heap" to stdout when it's started.Ryurik
M
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
Marilla answered 18/3, 2020 at 14:47 Comment(0)
F
1
  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
Fallacy answered 23/3, 2015 at 8:28 Comment(0)

© 2022 - 2024 — McMap. All rights reserved.