[Lazarus-es] uso de SetLength
Jesus Reyes A.
jesusrmx en gmail.com
Mar Jul 26 07:36:24 CEST 2016
De hecho, no estoy familiarizado con las interioridades del administrador
de memoria predeterminado de FPC por lo que me llama la atención como en
los dos primeros logs al compararlos, el valor de TotalFree después del
primer SetLength en lugar de disminuir aumenta, TotalAllocated me parece
que consistentemente aumenta después del primer SetLength. Lo que he
notado en tu test, es que la memoria no regresa al sistema sino hasta que
termina el programa, y esto es lógico pues las variables que mantienen la
memoria reservada son locales al procedimiento principal. Esto es
fácilmente comprobable. Simplemente activa la funcionalidad Heaptrc en la
opciones del proyecto y comprobaras que al final el programa no presenta
bloques sin liberar.
Yo creo que una mejor manera de comprobar si la memoria es o no liberada
de los arrays dinámicos es poner todo el código del procedimiento
principal en una subrutina, algo así como:
<pre>
begin
WriteLn('Inicial');
mostar_heap();
HacerTests;
WriteLn('ElFinal');
mostar_heap();
end.
</pre>
HacerTests es exactamente lo mismo que hacia antes el procedimiento
principal.
Acá, TotalAllocated antes y después muestra lo mismo. Yo creo (y nunca
mejor dicho :)) que el administrador de memoria de FPC mantiene
estructuras o bloques reservados que luego son liberados en algún tipo de
cache, de manera que no me parece extraño que la memoria que aparentemente
es reservada y luego liberada no se corresponda exactamente con los
valores antes y después.
Jesus Reyes A.
En Mon, 25 Jul 2016 20:45:17 -0500, Rafael Bidegain <r.bidegain en gmail.com>
escribió:
>>
>>>> Podrías por favor compartir tu programa de prueba?.
> si.
> es este:
>
> program ad1;
> ....
> end.
------------ próxima parte ------------
Se ha borrado un adjunto en formato HTML...
URL: <http://lists.lazarus-ide.org/pipermail/lazarus-es/attachments/20160726/077b9136/attachment.html>
More information about the Lazarus-es
mailing list