Pequeña duda sobre punteros

Iniciado por PabloPbl, 13 Diciembre 2015, 19:37 PM

0 Miembros y 1 Visitante están viendo este tema.

kondrag_X1

Una pregunta

Para evitar esos problemas se usa malloc reservando y posteriormente liberando la memoria, verdad?

Zekkk

Correcto, esta en la sección de datos de solo lectura y el puntero en si en el stack. Y no kondrag, no se reserva memoria usando malloc a menos que realmente lo necesites porque reservar memoria en el "heap" es mucho mas lento que en el stack. Considera que para reservar memoria con malloc() tienes que buscar un bloque de memoria lo suficientemente grande y dividirlo y para empeorar las cosas luego debes liberarlo usando free(). Por otra parte para resevar memoria en el stack solo tienes que cambiar un puntero.

Es decir, solo usa malloc cuando sea absolutamente necesario.

kondrag_X1

y cuando es necesario? siempre he tenido esa duda

Zekkk

Cuando necesitas acceso a una gran cantidad de memoria. Por ejemplo si quisieras un array bastante grande, o cuando necesitas mantener una variable por mucho tiempo como por ejemplo para una lista enlazada o algo asi.

0xFer

#14
Cita de: kondrag_X1 en 26 Diciembre 2015, 01:54 AM
y cuando es necesario? siempre he tenido esa duda

Si antes de la compilación no sabes cuánta memoria vas a utilizar para alojar tus variables entonces para no tener que reservar una enorme cantidad de memoria en tiempo de compilación y que al final no vas a terminar de usar entonces reservas memoria en tiempo de ejecución cuando ya conozcas cuánta memoria vas a necesitar.

Imagina que reservas memoria en tiempo de compilación para 200 variables pero al final terminas usando sólo 40 entonces habrás desperdiciado 160, si es posible entonces reservas memoria sólo para esas 40 variables con memoria dinámica. Aunque personalmente sólo uso memoria dinámica cuando sé que la cantidad de memoria que se perderá es grande en caso de no usarla.
Código (java) [Seleccionar]
int getRandomNumber(){
    return 4; //chosen by fair dice roll
              //guaranteed to be random
}

kondrag_X1

ok, gracias a todos yo reservaba memoria siempre que recibía un paquete cuando programa servidores y clientes en C.