Article View: es.comp.os.linux.programacion
Article #18708Re: Reserva din�mica de memoria en C
From: Cymoril sin patas
Date: Sun, 25 Jul 1999 00:00
Date: Sun, 25 Jul 1999 00:00
98 lines
3366 bytes
3366 bytes
A Fri, 16 Jul 1999 14:22:28 +0200, "Enrique Ferrero"
<enferpuc@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."
-----------------------------------------------
Technical Details
Message-ID:
<379fafb1.5454687@news.mad.ttd.net>Path:
arc1-ca.pugleaf.net!unknown!not-for-mailReferences:
<7mn1eh$gg1$1@talia.mad.ttd.net> <7mn85l$pis$1@talia.mad.ttd.net>Show Full Headers
Complete Article Headers
X-Google-Language: SPANISH,ASCII X-Google-Thread: f86c8,f3ddfa868aef2309 X-Google-Attributes: gidf86c8,public From: ceinalem@thegym.net (Cymoril sin patas) Subject: Re: Reserva din�mica de memoria en C Date: 1999/07/25 Message-ID: <379fafb1.5454687@news.mad.ttd.net> X-Deja-AN: 505165121 Content-Transfer-Encoding: 8bit References: <7mn1eh$gg1$1@talia.mad.ttd.net> <7mn85l$pis$1@talia.mad.ttd.net> Content-Type: text/plain; charset=ISO-8859-1 Organization: C.E.O.A.S.C.P. Mime-Version: 1.0 Reply-To: jcelisa@nexo.es Newsgroups: es.comp.os.linux.programacion