Administración de memoria con el contador de referencias de interoperabilidad

Actualización: noviembre 2007

El contador de referencias interoperativo intenta liberar memoria asignada por código no administrado. Este comportamiento se ajusta a las reglas de administración de memoria COM, pero difiere de las reglas que determinan el código C++ nativo.

Si se espera un comportamiento de código C++ nativo (no hay liberación de memoria) al realizar la invocación de la plataforma, que automáticamente libera memoria para los punteros, se puede producir confusión. Por ejemplo, llamar al siguiente método no administrado desde una DLL de C++ no libera automáticamente memoria.

Prototipo no administrado

BSTR MethodOne (BSTR b) {
     return b;
}

Sin embargo, si define el método como un prototipo de invocación de plataforma, sustituya todos los tipos BSTR por un tipo String y llame a MethodOne; Common Language Runtime intentará liberar b dos veces. Puede cambiar el comportamiento del cálculo de referencias utilizando tipos IntPtr en lugar de tipos String.

El motor de tiempo de ejecución usa siempre el método CoTaskMemFree para liberar memoria. Si la memoria con la que se está trabajando no se asignó con el método CoTaskMemAlloc, será necesario usar un tipo IntPtr y liberar la memoria manualmente con el método apropiado. Del mismo modo, se puede evitar la liberación automática de memoria en situaciones en las que nunca se debería hacer esto, como cuando se usa la función GetCommandLine de Kernel32.dll, que devuelve un puntero a la memoria del kernel. Para obtener más información sobre cómo liberar memoria manualmente, vea Ejemplo Buffers.

Vea también

Conceptos

Atributos direccionales

Tipos que pueden o que no pueden representarse como bits o bytes

Copiar y fijar

Otros recursos

Comportamiento predeterminado del cálculo de referencias