Un objetivo fijado es uno que no puede ser movido alrededor por el recolector de basura, es decir, su dirección se tiene que mantener la misma porque otra persona, por lo general alguna pieza de código no administrado, depende de que el objeto en una dirección de memoria definida.
Por lo general, el recolector de basura tiene libertad para reubicar objetos en la memoria. En el código administrado, como el recolector de basura tiene la capacidad de acceder a todas las referencias, puede reasignar libremente un objeto a una ubicación diferente y luego actualizar todas las referencias a ese objeto para que el proceso sea transparente para el código en ejecución. De esta forma, el GC tiene la capacidad de organizar mejor la memoria del programa y compactarla si es necesario.
Cuando un objeto no administrado está interactuando con su código (en secciones inseguras), puede surgir una situación donde hay un puntero en alguna parte de un elemento de su código & thinsp; - & thinsp; por ejemplo, en una pieza de memoria tratada en su código que está siendo manejado por una llamada COM externa. Esta memoria no se puede reasignar porque la llamada COM espera que el objeto esté en una dirección determinada y, por lo tanto, si se movió, el GC no tendría manera de notificar al objeto COM de ese cambio, lo que daría como resultado un acceso violación o peor.
No es necesario que sea inseguro. Como puede ver: Buffer = new byte [imageSize]; GCHandle gCBuffer = GCHandle.Alloc (Buffer, GCHandleType.Pinned); – Pedro77
Sin embargo, requiere plena confianza, lo que es equivalente a un código inseguro. – usr