Re: [m-users.] MR_GC_free ?

Julien Fischer <[email protected]> Wed, 8 Nov 2023 12:22:57 +1100 (AEDT)
Newsgroups gmane.comp.lang.mercury.general
Message-ID <[email protected]>

On Tue, 7 Nov 2023, Volker Wysk wrote:

> Am Mittwoch, dem 08.11.2023 um 05:53 +1100 schrieb Zoltan Somogyi:
>> On 2023-11-08 05:48 +11:00 AEDT, "Volker Wysk" <[email protected]> wrote:
>> > Hi.
>> > 
>> > In the ODBC library, there's space allocated by MR_GC_NEW and explicitly
>> > freed with MR_GC_free. This confuses me. Shouldn't space allocated by
>> > MR_CG_NEW be deallocated by the garbage collector? If it is to be
>> > deallocated explicitly, shouldn't the space be allocated by MR_NEW and be
>> > deallocated by MR_free?
>> 
>> Follow the definition of MR_GC_free in runtime/mercury_memory.h
>> to boehm_gc/include/gc.h.
>
> This leads to this (I couldn't understand the definition of this function):
>
> /* Explicitly deallocate an object.  Dangerous if used incorrectly.     */
> /* Requires a pointer to the base of an object.                         */
> /* An object should not be enabled for finalization (and it should not  */
> /* contain registered disappearing links of any kind) when it is        */
> /* explicitly deallocated.                                              */
> /* GC_free(0) is a no-op, as required by ANSI C for free.               */
> GC_API void GC_CALL GC_free(void *);
>
> So the gc explicitly frees the object and remembers that it has done so, so
> it won't be garbage collected later.

Correct.

> Is it bad style to use MR_GC_NEW and MR_GC_free,

No.

> since it should rather be
> done with MR_NEW/MR_free?

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.

> (That's what those are there for, aren't they?)

They're there primarily for the use of Mercury's runtime.

Julien.
_______________________________________________
users mailing list
[email protected]
https://lists.mercurylang.org/listinfo/users