🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

Article View: es.comp.os.linux.programacion
Article #18708

Re: Reserva din�mica de memoria en C

#18708
From: Cymoril sin patas
Date: Sun, 25 Jul 1999 00:00
98 lines
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-mail
References: <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