[Mono-list] need some help with PInvoke..

David Jeske jeske@chat.net
Thu, 10 Jul 2003 01:35:44 -0700

On Thu, Jul 10, 2003 at 01:22:55AM -0700, David Jeske wrote:
> For example, given this code:
>   unsafe struct DATA {};
>   unsafe class Foo {
>     unsafe DATA *bar;
>   }
> Will the GC have any problems if bar points to unmanaged memory?

BTW, I just found an MSDN page which seems to clarify this issue. (The
text is probably from somewhere in the CLR reference)


  "Unlike references (values of reference types), pointers are not
  tracked by the garbage collector -- the garbage collector has no
  knowledge of pointers and the data to which they point. For this
  reason a pointer is not permitted to point to a reference or to a
  struct that contains references, and the referent type of a pointer
  must be an unmanaged-type."

Seems clear that a pointer type will be ignored by the garbage

  "An unmanaged-type is any type that isn't a reference-type and
  doesn't contain reference-type fields at any level of nesting..."

    "Any user-defined struct-type that contains fields of
    unmanaged-types only."

Seems clear that an unsafe struct of only unmanaged types is an
unmanaged type. 

If I'm reading all that correctly, my "DATA*" struct pointer which
points at the unmanaged heap is just fine and dandy.

David Jeske (N9LCA) + http://www.chat.net/~jeske/ + jeske@chat.net