Las rutinas que explicaré son muy utilizadas con punteros, estas se encuentran dentro de la unidad system, por lo que no es necesario incluir la unidad con la palabra reservada Uses.

Esta rutina nos permite rellenar con un determinado valor de tipo byte o char el espacio de memoria ocupado por una variable sin tener en cuenta su estructura interna. Esta función tiene 3 parámetros, el primero es la variable que se va a rellenar, el segundo parámetro es el tamaño en bytes de la variable y el último parámetro es el valor de relleno, que puede ser de tipo byte o char. Ejemplo:

Este procedimiento se usa principalmente para inicializar arreglos o variables dinámicas que se usan como arreglos, al utilizarse con variables de tipo string, ansistring, unicodestring, este procedimiento puede alterar el byte de longitud o su estructura interna, es por ello recomendado usar StringOfChar en estos casos.

Se debe tener presente que fillchar no toma en cuenta la estructura interna de las variables que se quieren rellenar con un determinado valor, por ejemplo si definimos el siguiente arreglo:

M:array [1..10] of word;

y luego usamos:

fillchar(M,10,5);

Fillchar lo que hará es colocar el valor 5, sólo a los primeros 10 bytes del arreglo, cuando el arreglo en realidad tiene 20 bytes, ya que el tipo word es de dos bytes, el segundo parámetro no indica los elementos de un arreglo, si no que indica la cantidad de bytes que se quieren rellenar con el valor indicado, y si mostramos el primer elemento del arreglo M[1], este nos mostrara el valor 85, ya que tomará los dos primeros bytes que hemos rellenado con el valor 5.($55 = 85). Debido a esta característica, fillchar tiene sus variantes que son fillbyte, fillword, fillDWord, fillQWord, en donde el primero se usa para rellenar un espacio de memoria de byte en byte, el segundo de 2 bytes en 2 bytes, el tercero de 4 bytes en 4 bytes y el último de 8 bytes en 8 bytes. Ejemplo:

FillByte, FillWord, FillDWord y FillQWord, también se puede usar con arreglos dinámicos pero se debe colocar como primer parámetro el primer elemento del arreglo y no la variable. Ejemplo:

Este procedimiento nos permite copiar el contenido de una variable a otra por bloques, sin tener en cuenta su estructura interna. Aunque el nombre hace pensar lo contrario, la variable del cual se toman los bytes para ser copiados no es borrado. El procedimiento Move tiene 3 parámetros. El primero es la variable que tiene los bytes a ser copiados. El segundo parámetro es la variable que recibirá los bytes previamente preparados para ser copiados, el tercer parámetro nos dice la cantidad de bytes que serán copiados. Ejemplo:

Lo que hace Move internamente es tomar la dirección de memoria que se le introduce en su primer parámetro, y desde esa dirección de memoria separa los bytes que se copiarán, en la otra dirección de memoria indicada en el segundo parámetro. En el ejemplo se le indica a Move que tome la dirección de memoria desde el elemento 5 de la variable p01, para copiar desde esa dirección en adelante 5 bytes y colocarlos en el arreglo c01 en la misma posición. Este método de copiar bytes es más rápido que usar un bucle for.

Es una función que nos permite cambiar el tamaño asignado a una variable dinámica, devolviendo una nueva dirección de memoria, si el tamaño a cambiar es menor entonces el contenido de la variable dinámica se truncará. Esta función sólo tiene 2 parámetros el primero es el puntero de la variable dinámica que se desea modificar, y el segundo la cantidad en bytes que se desea aumentar o disminuir, Ejemplo:

Si el tamaño a cambiar es mayor, el contenido adicional no se inicializa a cero, el programador es responsable de inicializar esos datos. Esta función devuelve NIL, cuando no se pudo cambiar el tamaño de la variable dinámica, siempre y cuando se esté usando ReturnNilIfGrowHeapFails. ReallocMem no se usa con ansistring, unicodestring y arreglos dinámicos.