[webkit-dev] Question for people working on ports

Maciej Stachowiak mjs at apple.com
Thu Sep 29 14:08:29 PDT 2005


Hi everyone,

After recently changing to a threadsafe malloc, I'd like to use it  
for all C++ allocations in WebCore/JavaScriptCore. Darin suggested a  
neat trick for doing this, where we can do a private declaration of  
operator new, so it won't affect outside C++ code:

#if __GNUC__
#define PRIVATE_INLINE __private_extern__ inline __attribute__ 
((always_inline))
#else
#define PRIVATE_INLINE inline
#endif

PRIVATE_INLINE void* operator new(size_t s) { return fastMalloc(s); }
PRIVATE_INLINE void operator delete(void* p) { fastFree(p); }
PRIVATE_INLINE void* operator new[](size_t s) { return fastMalloc(s); }
PRIVATE_INLINE void operator delete[](void* p) { fastFree(p); }


Note that the operator declarations are inline, so the header that  
contains this must be included in every C++ implementation file (or  
you could get new/delete mismatches which would lead to crashes or  
random memory trashing).

On Mac OS X, the easiest way to do this is to make sure these  
definitions are included in the per-project prefix header. The Xcode  
build system will tell gcc to make a precompiled header out of this,  
and then automatically pass it as a prefix header to all gcc  
invocations. I don't know if other build systems have anything  
analogous. Another possible alternative is to make sure these  
declarations go in config.h, and then force every source file to  
include it. But that's a little ugly and furthermore hard to  
maintain, since forgetting a config.h include will not lead to a  
build failure but will cause incorrect code to be generated.


So does anyone have any experience here? I'd like the solution to  
work at least on Linux, Windows and Symbian Series 60.

Regards,
Maciej




More information about the webkit-dev mailing list