[Date Prev][Date Next][Thread Prev][Thread Next]
[Date Index]
[Thread Index]
- Subject: Re: Why are Lua Modules Only a Runtime Component of the Language?
- From: "Robert G. Jakabosky" <bobby@...>
- Date: Mon, 7 Mar 2011 19:56:59 -0800
On Monday 07, HyperHacker wrote:
> In C/C++ I often find myself wishing I could globally redefine malloc,
> free, new and delete to print debugging info to track down
> memory-related bugs... in Lua you can do this kind of thing as easily
> as shown above!
You can intercept calls to malloc()/free()/etc.., by using the "--wrap" linker
option (See manpage for ld).
With gcc you can use the following option:
-Wl,--wrap,malloc,--wrap,calloc,--wrap,free,--wrap,realloc,--wrap,strdup,--
wrap,strndup
Then you create wrapper functions like:
void * __wrap_malloc(size_t size) {
printf("malloc called with %zu\n", size);
return __real_malloc(size);
}
I have used this trick to log the memory usage of long running services to
detect memory leaks. You can pre-append a header structure to all allocations
to track the memory block size, so the free()/realloc() functions know the
block size. This will also work for C++ code since 'new' calls malloc to
allocate memory for objects. Also this should intercept alloc calls from
other libraries too.
Now when I am writing C code I use an allocator function like the one the Lua
VM uses, since it allows memory usage tracking without wasting memory to track
the size of each allocated block.
--
Robert G. Jakabosky