[cfe-dev] Proposal: Type-Aware Memory Profiling

Dai Mikurube dmikurube at chromium.org
Mon Jan 7 03:01:55 PST 2013


Hello,

Does anyone have additional opinions about it?  If none, I think I'll
create a bug entry and start working on it soon.


On Fri, Dec 7, 2012 at 1:47 AM, Dai Mikurube <dmikurube at chromium.org> wrote:

> Thanks for your interest.
>
> Does "the context information" mean like a call site (__FILE__ and
> __LINE__)?  If so, yes, preserving them may be useful.  It might be a good
> idea if it is committed to the Clang tree.  I didn't implement it in the
> prototype just because I didn't use it -- we're using calling stacks
> instead.
>
>
> On Thu, Dec 6, 2012 at 5:24 PM, Onewastedlife <onewastedlife at gmail.com>wrote:
>
>> Interesting.. Why would you not preserve the context information as well?
>>
>> Regard,
>> Ramneek
>>
>> On Dec 6, 2012, at 11:28 PM, Dai Mikurube <dmikurube at chromium.org> wrote:
>>
>> 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
>>
>>  _______________________________________________
>> cfe-dev mailing list
>> cfe-dev at cs.uiuc.edu
>> http://lists.cs.uiuc.edu/mailman/listinfo/cfe-dev
>>
>>
>
>
>  --
> Dai MIKURUBE
>    dmikurube at chromium.org
>
>


-- 
Dai MIKURUBE
   dmikurube at chromium.org
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/cfe-dev/attachments/20130107/df5aaaa0/attachment.html>


More information about the cfe-dev mailing list