This is the mail archive of the java@gcc.gnu.org mailing list for the Java project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Re: problem when mapping malloc to GC_malloc.



----- Original Message ----- From: "abhishek desai" <abhi00@gmail.com>
To: <java@gcc.gnu.org>
Sent: Thursday, June 18, 2009 8:00 AM
Subject: problem when mapping malloc to GC_malloc.



Hi,

My JNI code includes redefinitions to the malloc, free and realloc
functions (shown below). These functions call GC_malloc, GC_free and
GC_realloc respectively. This is done so that any calls to the malloc
get allocated through the garbage collector. However this is failing
with segfault. Any clues why this does not work ?
I am using this code along with the libgcj library linked dynamically
with my application.

void *malloc(size_t size)
{
       return GC_malloc(size);
}

void *realloc(void *ptr, size_t size)
{
       return GC_realloc(ptr, size);
}

void free(void *ptr)
{
       GC_free(ptr);
}


IMO, this is a very bad way to try to use a GC, and that it is blowing up when something like this is tried is no real surprise...


(very likely you will end up with code calling GC_malloc in some places, and the real malloc in others, and in-all creating a horrible mess...).


a much better (although IMO still not very good) way to do this would be to instead use macros to rename your functions:
#define malloc(x) GC_malloc(x)
...


which will apply locally to whatever code is in question (and, if used with caution, should resist blowing up...).


however, my personal recommendation is to NOT use a GC implicitly in this way, rather one should make use of the GC explicit (AKA: actually go and rename their function calls, and keep track of how they use pointers so that GC memory and malloc memory don't get mixed up, ...).




regards abhishek



Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]