martes, 28 de junio de 2016

3. OPERADORES Y FUNCIONES DE LA GESTIÓN DINÁMICA DE MEMORIA

INTRODUCCIÓN

La temática relacionada con los operadores y las funciones utilizadas para la gestión dinámica de memoria, trata sobre programas de aplicación a los operadores new y delete propios de C++, al igual que las funciones malloc(), free(), calloc() y realloc().

QUÉ ES UN OPERADOR

Un operador es un símbolo (+, -, *, /, etc) que tiene una función predefinida
 (suma, resta, multiplicación, etc)


TIPOS DE OPERADORES 
Aritméticos
- Relacionales
- Lógicos
- A nivel de bit (bitwise operators)
- Especiales

TIPOS DE OPERADORES 

Aritméticos: Nos permiten, básicamente, hacer cualquier operación aritmética, que necesitemos (ejemplo: suma, resta, multiplicación, etc).

OPERADOR
FUNCIÓN
-
Resta
+
Suma
*
Multiplicación
/
División
·/.
Módulo
--
Decremento
++
Incremento



Relacionales: Al igual que en matemáticas, estos operadores nos permitirán evaluar las relaciones (igualdad, mayor, menor, etc) entre un par de operandos. Los operadores relacionales de los que dispone C++ son:

OPERADOR
FUNCIÓN
> 
Mayor que
>=
Mayor o igual que
< 
Menor que
<=
Menor o igual que
==
Igual
!=
Distinto
El resultado de cualquier evaluación de este tipo, es un valor ``cierto'' (true) o ``falso'' (false). 

vRelacionales:

Al igual que en matemáticas, estos operadores nos permitirán evaluar las relaciones (igualdad, mayor, menor, etc) entre un par de operandos. Los operadores relacionales de los que dispone C++ son:

OPERADOR
FUNCIÓN
> 
Mayor que
>=
Mayor o igual que
< 
Menor que
<=
Menor o igual que
==
Igual
!=
Distinto
El resultado de cualquier evaluación de este tipo, es un valor ``cierto'' (true) o ``falso'' (false). 

Lógicos:

Como operadores lógicos designamos a aquellos operadores que nos permiten ``conectar'' un par de propiedades


OPERADOR
FUNCIÓN
&&
Conjunción (Y)
||
Disyunción (O)
!
Negación

OPERADORES NEW Y DELETE


El lenguaje C++ cuenta con dos operadores pre construidos, ellos son:
New y Delete
Por esta razón no se requiere incluir ninguna librería o archivo de cabecera para utilizarlos.

El operador New: Realiza una labor parecida a la de la función malloc(), asignando un bloque de memoria según sea requerido


OPERADOR DELETE

Este operador libera un bloque de memoria asignada por New en tiempo de ejecución, de manera semejante a como lo hace la función free().

La sintaxis para el uso del operador new es: 

Apuntador = new tipo_de_dato;
Este operador hace una petición al sistema operativo para que se le asigne un espacio en memoria, con el tamaño acorde al tipo de datos, si este espacio está disponible, la operación regresa la dirección real que se otorga, en caso de no haber espacio regresa el valor de NULL (0).


FUNCION DE MALLOC () Y FREE ()

FUNCIÓN MALLOC ():
Es una de las funciones de asignación de memoria propias del
lenguaje de programación C.
Cuando se usa malloc () se pasa la cantidad de bytes de memoria que
se necesita (asigna el numero especifico de bytes).
Malloc () encuentra y reserva un bloque de menoría del tamaño pedido
y regresa la dirección del primer byte del bloque. No hay de qué preocuparse sobre que parte de memoria se usa, ya que esto es manejado automáticamente.
 La función malloc () regresa una dirección, y su tipo de retorno es un apuntador a tipo void.

POR QUE VOID

  Un apuntador a tipo void es compatible con todos los tipos de datos. Como la memoria asignada por malloc () puede ser usada para guardar cualquiera de los tipos de datos de C, es adecuado el tipo de retorno void.

LA FUNCIÓN FREE()
Al igual que malloc(), free() es una función del lenguaje de programación C, utilizado para liberar la memoria asignada por malloc (). Al usar la función free () se debe tener en cuenta la regla de oro explicada en el apartado del operador delete:
"toda la memoria que se reserve durante el programa hay que
liberarla antes de salir del programa“.


Al usar las funciones malloc () y free () se debe incluir el archivo de cabecera o librería STDLIB.H.
Ejemplos de aplicación
Ejemplo 1
Asigna memoria para un arreglo de 50 enteros
Int *numero;
numero = (int* )malloc (50 * sizeof (int));

OTRAS FUNCIONES PARA ASIGNAR FUNCIONES DINÁMICAS

La Funcione Calloc()
A continuación se presentan el prototipo para la definición de la función Calloc().
void *calloc(size_tnmemb, size_tsize);
Cuando se usa la función malloc() la memoria no es inicializada (a cero) o borrada. Si se quiere inicializar la memoria entonces se puede usar la función calloc. La función calloc es computacionalmente un poco más cara pero, ocasionalmente, más conveniente que malloc. 


       Se debe observar también la diferencia de sintaxis entre calloc y malloc, ya que calloc toma el número de elementos deseados (nmemb) y el tamaño del elemento (size), como dos argumentos individuales. 
Por lo tanto para asignar a 100 elementos enteros que estén inicializados a Cero se puede hacer: 
int *ip;
ip = (int *) calloc(100, sizeof(int) );


La Función Realloc( )
Esta función intenta cambiar el tamaño de un bloque de memoria previamente asignado. El nuevo tamaño puede ser más grande o más pequeño. Si el bloque se hace más grande, entonces el contenido anterior permanece sin cambios y la memoria es agregada al final del bloque. Si el tamaño se hace más pequeño entonces el contenido sobrante permanece sin cambios.
El prototipo de definición para la función realloc() es como se presenta a continuación.
void *realloc(void *ptr, size_tsize);

RESUMEN DE LAS FUNCIONES


FUNCIÓN
DESCRIPCCIÓN
MALLOC
Asigna el numero especifico de bytes.
REALLOC
Aumenta o disminuye el tamaño del bloque de memoria especificada. Reasigna si es necesario.
CALLOC
Asigna el numero especificado de bytes y los inicializa a cero (0).
FREE
Libera el bloque de memoria especificada de nuevo al sistema.

No hay comentarios:

Publicar un comentario