[m-users.] MR_GC_free ?
Volker Wysk
post at volker-wysk.de
Thu Nov 9 23:36:42 AEDT 2023
Am Donnerstag, dem 09.11.2023 um 14:13 +1100 schrieb Peter Wang:
> On Wed, 08 Nov 2023 15:03:19 +0100 Volker Wysk <post at volker-wysk.de> wrote:
> > Am Mittwoch, dem 08.11.2023 um 14:54 +0100 schrieb Volker Wysk:
> > > Am Donnerstag, dem 09.11.2023 um 00:33 +1100 schrieb Julien Fischer:
> > > > On Wed, 8 Nov 2023, Volker Wysk wrote:
> > > >
> > > > > > MR_NEW and MR_free allocate and free memory using malloc() and free()
> > > > > > respectively, not with the GC. It's safer to use the GC versions.
> > > > > > Additionally, foreign_procs that mix memory allocators, especially a
> > > > > > manual allocator, is likely be difficult to debug and maintain.
> > > > >
> > > > > This leads me to the same question as Peter's answer: Can the garbage
> > > > > collector see inside a C structure, if it is allocated with MR_GC_NEW?
> > > >
> > > > Yes it can. Bear in mind that the Boehm GC is designed to be garbage for C; so far as it is concerned there is no distinction
> > > > between Mercury and C data structures.
> > >
> > > I'm wondering how it can, but okay.
> > >
>
> Boehm GC is a conservative garbage collector. It doesn't know anything
> about C structures or Mercury structures, as it gets no help from the C
> or Mercury compiler. It assumes that any memory word it has allocated to
> the user may contain a pointer value. If it sees a value that looks like
> a address that it handed out, then it is treated as a live reference to
> that object. That means a random value in memory could cause an object
> to be live longer than necessary, but it's not usually an issue
> (particularly with 64-bit address spaces).
>
> Boehm GC does provide a way to allocate "atomic" objects;
> such an object will be assumed not to contain any pointers.
>
> Boehm GC also supports the use of a small number of custom mark
> procedures, which could be used to scan objects (more) precisely.
> The documentation recommends to use custom mark procedures only in
> "exceptional cases"; we don't use them in the Mercury system.
Thank you for the explanation! Now I'm prepared to make that ODBC library
thread-safe.
Cheers,
Volker
More information about the users
mailing list