¿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 № 1La 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.