/ / ¿Cómo anclar la memoria asignada por Marshal.AllocHGlobal () en C #? - c #, .net, recolección de basura, pinvoke, clasificación

Cómo fijar la memoria asignada por Marshal.AllocHGlobal () en C #? - c #, .net, recolección de basura, pinvoke, clasificación

¿Cómo anclas la memoria asignada por Marshal.AllocHGlobal ()?

Mi primer intento fue el siguiente:

int bytes = 10;
IntPtr ip = Marshal.AllocHGlobal(bytes);
GCHandle iph = GCHandle.Alloc(ip, GCHandleType.Pinned);

Aunque creo que esto solo fija el IntPtr y no el bloque de memoria al que se refiere el IntPtr.

Respuestas

5 para la respuesta № 1

La memoria asignada por AllocHGlobal Ya está anclado. el IntPtr que se devuelve es la dirección de la ubicación anclada.

ACTUALIZACIÓN: Para ser pedante, no puede "fijar" realmente la memoria asignada por AllocHGlobal, anclar algo significa decirle al recolector de basura que no mueva el objeto en la memoria. La memoria asignada por AllocHGlobal es "memoria no administrada", lo que significa que es memoria que no es administrada por el recolector de basura.

Ningún proceso además del recolector de basura mueve la memoria en su programa, y ​​al recolector de basura no le importan los recursos no administrados.