CPython and a C extension using Boehm GC

MrJean1 MrJean1 at gmail.com
Tue Dec 25 15:19:52 EST 2007


Perhaps, you can pre-load the extension library when Python is
invoked. It is probably trying.

Pre-loading is commonly done done for memory management and profiling
libraries and it may (or may not) work for libraries including the
Boehm-GC.  And if it does work, call GC_INIT inside the initialization
function of the extension library.  The latter will be called just
before Python's main is.

If you are using the GNU C, writing the initialization function could
be as simple as

    void __attribute__((constructor))
    _initializer (void)  /* any name */
    {
       call GC_INIT();
    }

For more details, see <http://gcc.gnu.org/onlinedocs/gcc/Function-
Attributes.html> under 'constructor'.  Other compilers may support a
#pragma like init for this purpose.

Pre-loading a (shared) library on Linux is typically done using the
env command, e.g.:

  $ env  LD_PRELOAD=<path_to_the_library>  python ....

Some command shells support other ways and the name LD_PRELOAD may be
different on other O/S's.

HTH, /Jean Brouwers



On Dec 25, 3:34 am, malkarouri <malkaro... at gmail.com> wrote:
> Hi everyone,
>
> Is it possible to write a Python extension that uses the Boehm garbage
> collector?
> I have a C library written that makes use of boehm-gc for memory
> management. To use that, I have to call GC_INIT() at the start of the
> program that uses the library. Now I want to encapsulate the library
> as a CPython extension. The question is really is that possible? And
> will there be conflicts between the boehm-gc and Python memory
> management? And when should I call GC_INIT?
>
> Best Regards,
>
> Muhammad Alkarouri




More information about the Python-list mailing list