‒ Variables dinámicas y el espacio de memoria de la computadora.
Conforme se van creando las variables dinámicas, la memoria de la computadora se irá llenando, y cuando ya no haya espacio disponible para colocar otra variable dinámica, entonces se produce el error: falta de memoria (Out of memory), haciendo que el programa se detenga.
No es posible determinar de manera exacta y precisa cuanta memoria disponible se puede usar o existe para la siguiente variable dinámica que se va a crear, la razón es que las variables dinámicas se crean en el espacio de memoria disponible para los programas, y este espacio de memoria varía en cualquier momento, de acuerdo al uso que le den los programas. Es decir, si se pudiese determinar con una instrucción, que para la siguiente variable dinámica hay disponible 100 MiB en determinado momento, entonces este valor podría cambiar en el momento en que se use la instrucción para crear la variable dinámica, ocasionando un error de falta de memoria (Out of memory).
Asumiendo que se tenga un equipo con 4GiB de memoria física instalada y que sólo se va usar un Sistema operativo de 32 bits entonces el espacio de memoria disponible podría estar entre 1GiB y 2 GiB dependiendo del sistema operativo que se use. En los sistemas operativos Windows de 32 bits (Win32), la memoria se administra del siguiente modo 2 GiB para el sistema operativo (kernel) y 2 GiB para los programas permitiendo crear variables dinámicas que oscilan en la mayoría de los casos entre 1 GiB a 1.6 GiB. En los sistemas operativos Linux de 32 bits, la memoria se administra del siguiente modo 1 GiB para el sistema operativo (kernel) y 3 GiB para los programas, permitiendo crear variables dinámicas que oscilan entre 2 GiB a 2.6 GiB. El siguiente programa de ejemplo genera el error de falta de memoria en una computadora con las características antes mencionadas, Ejemplo:
El programa anterior permite crear tres variables dinámicas de 1 GiB, al momento de crear la tercera o segunda variable de 1 GiB, aparece el error de falta de memoria (Out of memory) y el programa se termina. Para tratar este tipo de error de una manera más elegante el compilador ofrece dos métodos, el primero asignar el valor true a la variable ReturnNilIfGrowHeapFails y el segundo el uso de excepciones (se explicará este método más adelante).
Cuando el valor de la variable ReturnNilIfGrowHeapFails es true, entonces las rutinas como getmem, y new devolverán NIL si la creación de la variable dinámica no tuvo éxito, permitiendo pasar el control al programa. Ejemplo:
Existen métodos para crear variables dinámicas de hasta 10 GiB, en sistemas operativos de 32 bits, pero lo recomendado en estos casos es usar sistemas operativos de 64 bits.
En los sistemas operativos Linux de 64 bits, en teoría se podrían usar computadoras de hasta 16 EiB (264), de memoria física, pero en la práctica esto no es posible debido a que no existen equipos con esas características. Una distribución Linux de 64 bits típica te permitirá usar un máximo de 16 GiB de memoria virtual (ulimit -v), permitiéndote crear variables dinámicas de hasta 10 GiB sin ningún problema, pero si tu sistema operativo Linux de 64 bits está configurado para soportar más memoria virtual entonces podrás crear variables dinámicas de hasta 160 GiB. El siguiente ejemplo permite crear una variable dinámica de 10 GiB, en un equipo con un sistema operativo Linux de 64bits, configurado con 16 GiB de memoria virtual (4 GiB de memoria física y 12 GiB de memoria de intercambio):
El uso de ReturnNilIfGrowHeapFails, con ansistring y unicodestring, no es posible ya que estas variables tienen un tratamiento especial, en estos casos se usan excepciones, que se explicarán más adelante.
Última revisión: 10/12/2013.