Re: problem when mapping malloc to GC_malloc.
"BGB" <[email protected]>
| Newsgroups | gmane.comp.gcc.java.devel |
|---|---|
| Message-ID | <[email protected]> |
----- Original Message ----- From: "abhishek desai" <[email protected]> To: <[email protected]> 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 >