[cfe-dev] Proposal: Type-Aware Memory Profiling
Dai Mikurube
dmikurube at chromium.org
Thu Dec 6 07:28:28 PST 2012
Hi cfe-dev,
I'd like to propose a way of Type-Aware Memory Profiling in Clang. It was
one of the lightning talks at the DevMtg by Nico Weber on behalf of me.
Slides and Video were recently published.
* http://llvm.org/devmtg/2012-11/Weber_TypeAwareMemoryProfiling.pdf
* http://llvm.org/devmtg/2012-11/videos/Weber_TypeAwareMemoryProfiling.mp4
Object's type information is useful to profile memory usage in a process.
Type info is, however, hard to use in C++ programs. Our proposal is to
make it easy by compiler's help. We implemented an early prototype, and
the prototype has been working in Chromium project for a couple of months.
What do you think? I wonder if I could have your opinions about it. The
details are discussed in this document.
https://docs.google.com/document/d/1zyJ3FJhheJ5iSxYaMXARkZcR61tx6r44euMJbWw8jFY/edit
tl;dr, we did it by user-defined intercepting functions for operator new
and delete. If a developer defines a function __op_new_intercept__ (and if
a compiler option is given!), the function intercepts operator new calls.
An example follows :
$ cat typeaware.cc
#include <stdio.h>
#include <typeinfo>
struct Klass {
int x, y, z;
};
void* __op_new_intercept__(
void* address, std::size_t size, const std::type_info& type) {
printf("Allocated %lu bytes for %s at %016p.\n",
size, type.name(), address);
return address;
}
void* __op_delete_intercept__(
void* address, std::size_t size, const std::type_info& type) {
printf("Deallocated %lu bytes for %s at %016p.\n",
size, type.name(), address);
return address;
}
int main() {
int *i;
Klass *k;
i = new int(3);
k = new Klass();
delete k;
delete i;
return 0;
}
$ clang++ -fintercept-allocation-functions typeaware.cc
$ ./a.out
Allocated 4 bytes for i at 0x000000022df010.
Allocated 12 bytes for 5Klass at 0x000000022df030.
Deallocated 12 bytes for 5Klass at 0x000000022df030.
Deallocated 4 bytes for i at 0x000000022df010.
--
Dai MIKURUBE
dmikurube at chromium.org
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/cfe-dev/attachments/20121206/0b35313c/attachment.html>
More information about the cfe-dev
mailing list