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
.
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.
firefox
crashed, when TCMalloc is installed in system-wide manner. All other programms on Ubuntu 16.04 are totally happy with it. –
Sake sudo apt-get install google-perftools libgoogle-perftools-dev
–
Bags 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.
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.
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 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
- tcmalloc is in the google perf tool, installation guide could be found here.
- The example is included in the google perf tool
- see here, section Performance Notes
© 2022 - 2024 — McMap. All rights reserved.