Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

Reserva dinámica de memoria en C

25 views
Skip to first unread message

Paco

unread,
Jul 16, 1999, 3:00:00 AM7/16/99
to
Por favor ¿Alguien me puede explicar detalladamente las diferencias entre
malloc(), calloc(), i sobre todo alloca()?
¿Qué influencia tienen una programación multi-threaded?
¿Donde reservan la memoria: en el heap? ¿todas?

Muchas gracias.
Un saludo.
PACO

--


Enrique Ferrero

unread,
Jul 16, 1999, 3:00:00 AM7/16/99
to

Paco escribió en mensaje <7mn1eh$gg1$1...@talia.mad.ttd.net>...

>Por favor ¿Alguien me puede explicar detalladamente las diferencias entre
>malloc(), calloc(), i sobre todo alloca()?

En el man me parece a mí que queda bastante claro. Pero bueno. Allá va.
malloc(),calloc() y realloc() reservan memoria en el heap. Cada una a su
manera.
alloca() reserva memoria en la pila.
La diferencia fundamental es que cuando termina la función que ha llamado a
alloca(), la memoria que ha utilizado se pierde: la pila baja un nivel. Con
las otras funciones la memoria no se libera a no ser que se haga un free() o
que se acabe el proceso.

>¿Qué influencia tienen una programación multi-threaded?


La reserva de memoria en el heap no tiene problema.
Para alloca(), la verdad es que no tengo ni idea, pero supongo que cada
thread debe tener una cantidad de pila asociada, por lo que alloca()
reservaría memoria en esa pila propia del thread. Sin embargo, esto es
hablar por no callar.

>Muchas gracias.

Mira las páginas del man, y si on te queda claro, pregunta otra vez.

>Un saludo.
>PACO


Cymoril sin patas

unread,
Jul 25, 1999, 3:00:00 AM7/25/99
to
A Fri, 16 Jul 1999 14:22:28 +0200, "Enrique Ferrero"
<enfe...@olemail.com> contestaba a Paco ...

>
>Paco escribió en mensaje <7mn1eh$gg1$1...@talia.mad.ttd.net>...
>>Por favor ¿Alguien me puede explicar detalladamente las diferencias entre
>>malloc(), calloc(), i sobre todo alloca()?

>alloca() reserva memoria en la pila.
>La diferencia fundamental es que cuando termina la función que ha llamado a
>alloca(), la memoria que ha utilizado se pierde: la pila baja un nivel. Con
>las otras funciones la memoria no se libera a no ser que se haga un free() o
>que se acabe el proceso.

O que hagamos un realloc() con valor cero o que falle el realloc()


>>¿Qué influencia tienen una programación multi-threaded?
>La reserva de memoria en el heap no tiene problema.
>Para alloca(), la verdad es que no tengo ni idea, pero supongo que cada
>thread debe tener una cantidad de pila asociada, por lo que alloca()
>reservaría memoria en esa pila propia del thread. Sin embargo, esto es
>hablar por no callar.

Pos puede ser, pero sin tener npi de como va el tema, la verdad es que
suena bien.
Respecto de malloc y calloc la diferencia es que a malloc le pasas la
memoria a reservar para un objeto y te da un puntero en vaya ud a
saber donde, y calloc le tienes que decir cuanta memoria para el
objeto a reservar y cuantos objetos de ese tipo.
Ejemplo (y perdón si me esquivoko un posko):

typedef struct tpepe { // definimos tpepe
char hola[20];
int saludo;
} *juan; // puntero a una estructura tpepe

/ * ... */

// ahora reservamos memoria para 4 estructuras tpepe
// usando malloc


if (
(
juan=malloc(
(
sizeof(tpepe)*4
)
)
)==NULL
)
{
printf("No hay memoria);
exit(-1);
}

/* .... */
// usando calloc
if (
(
juan=malloc(
(
sizeof(tpepe), 4
)
)
)==NULL
)
{


Como puedes observar hay pocas diferencias.

>>Muchas gracias.
Muschas de nadas


>Mira las páginas del man, y si on te queda claro, pregunta otra vez.

Eso eso, Paquito, mira las man.
>>Un saludo.
>>PACO
Otro pa ti y otro para Enrique.

Saludines
Cymoril++ (con patas).

P.D.

char **(*(*var () )[20]) ==> esta si que mola
A ver si no me equivoco ... (que estoy practicando)

var es un puntero
a una función
que devuelve un puntero a
un array de 20 punteros a
punteros de caracteres.
Je je. Se sale ...
-----------------------------------------------
Cymoril sin patas

"I believe this is heaven to no one else but me, and I'll defend it as long as I can be left alone to linger in my own silence."

-----------------------------------------------

Enrique Ferrero

unread,
Jul 26, 1999, 3:00:00 AM7/26/99
to
>char **(*(*var () )[20]) ==> esta si que mola
>A ver si no me equivoco ... (que estoy practicando)
>
>var es un puntero
>a una función
>que devuelve un puntero a
>un array de 20 punteros a
>punteros de caracteres.
>Je je. Se sale ...

Por cosas com esta prefiero java....... :-)

Si quieres ver código c críptico de verdad, busca información sobre el
concurso "ofuscated c". Hay un libro que a través de estos programas enseña
lo que NO se debe hacer en un programa.
Hay cosas verdaderamente flipantes.

Ignacio Arenaza

unread,
Jul 26, 1999, 3:00:00 AM7/26/99
to
>>>>> "Cymoril" == Cymoril sin patas <cein...@thegym.net> writes:

Cymoril> verdad es que suena bien. Respecto de malloc y calloc la
Cymoril> diferencia es que a malloc le pasas la memoria a reservar
Cymoril> para un objeto y te da un puntero en vaya ud a saber
Cymoril> donde, y calloc le tienes que decir cuanta memoria para
Cymoril> el objeto a reservar y cuantos objetos de ese tipo.

Ademas, calloc inicializa la zona de memoria pedida con todo ceros,
mientras que malloc te la pasa toda llena de bits sucios que a saber
quien ha usado ;-)

Saludos. Iñaki.

--
PGP Key available at http://personales.jet.es/inaki.arenaza/pgpkey.html
Linux Registered User #44369

0 new messages