Lo primero que hay que indicar es que el funcionamiento es inseguro, incluso el propio PowerShell falla a veces cuando se ejecuta el siguiente script.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
$a = 'holass' # SizeOf: Devuelve el tamaño no administrado, en bytes, de una clase. $size = [Runtime.InteropServices.Marshal]::SizeOf($a[0])*$a.Length # AllocHGlobal: Asigna memoria de la memoria no administrada del proceso. $ptr0 = [Runtime.InteropServices.Marshal]::AllocHGlobal($size) # Copy: Copia los datos de una matriz administrada a un puntero de memoria no administrada o de un puntero de memoria no administrada a una matriz administrada. [Runtime.InteropServices.Marshal]::Copy($a,0,$ptr0,$a.Length) # PtrToStringAuto: Asigna un String administrado y copia en él total o parcialmente una cadena no administrada. [Runtime.InteropServices.Marshal]::PtrToStringAuto($ptr0) # FreeHGlobal: Libera memoria previamente asignada de la memoria no administrada del proceso. [Runtime.InteropServices.Marshal]::FreeHGlobal($ptr0) |
Resultado de la ejecución en Windows
![](https://www.jesusninoc.com/wp-content/uploads/2021/06/memoria-marshal.png)
Resultado de la ejecución en Mac
![](https://www.jesusninoc.com/wp-content/uploads/2021/06/resultado-en-mac.png)