[an error occurred while processing this directive] [an error occurred while processing this directive][an error occurred while processing this directive] [an error occurred while processing this directive] [an error occurred while processing this directive] [an error occurred while processing this directive] (none) [an error occurred while processing this directive] [an error occurred while processing this directive] [an error occurred while processing this directive] [an error occurred while processing this directive] [an error occurred while processing this directive][an error occurred while processing this directive] [an error occurred while processing this directive][an error occurred while processing this directive] [an error occurred while processing this directive][an error occurred while processing this directive] [an error occurred while processing this directive] [an error occurred while processing this directive] [an error occurred while processing this directive] (none) [an error occurred while processing this directive] [an error occurred while processing this directive] [an error occurred while processing this directive][an error occurred while processing this directive]
 
[an error occurred while processing this directive] [an error occurred while processing this directive]
Skåne Sjælland Linux User Group - http://www.sslug.dk Home   Subscribe   Mail Archive   Forum   Calendar   Search
MhonArc Date: [Date Prev] [Date Index] [Date Next]   Thread: [Date Prev] [Thread Index] [Date Next]   MhonArc
 

Re: [PROGRAMMERING] c malloc osv.



Morten Nissen wrote:
> Hejsa Liste,
>
> Igen, jeg er ny i c, men har fra tid til anden lavet noget c++.
>
> Jeg er kommet noget i tvivl om hvordan det er med c og hukommelses
> håndtering, og hvornår det er nødvendigt at bruge malloc/free osv.
>
> Eks 1.
> char* hejsa = (char *) malloc( 6 );
> strcpy( hejsa, "Hejsa" );
> printf(hejsa);
> free( hejsa );
>
> Eks 2.
> char* hejsa2 = "Hejsa2";
> printf( hejsa2 );
>
> Eks 3.
> char hejsa3[7] = "Hejsa3";
> printf(hejsa3);
>
Der er ikke den store forskel på eksempel 2 og 3, bortset fra at i
eksempel 2 kan du sætte din variabel til at pege på noget andet. Det kan
du ikke i eksempel 3.

I eksempel 2 og 3 ved du på forhånd, hvor meget hukommelse, du skal
bruge, for dataene er compilet med. Det gør du egentlig også i eksempel
1, men når du ikke ved, hvor meget plads du skal bruge (måske skal du
læse hele indholdet af en fil), så er dynamisk allokering af hukommelse
det eneste mulige alternativt.

Der er så også mange strategier til håndtering af hukommelse, for det er
meget hurtigt at allokere plads på stakken, som til gengæld ikke er
særligt stor, medens det kræver en hel del flere instruktioner at
allokere hukommelse på heapen, som til gengæld er en hel del større (som
regel), men med heapen skal man også selv frigive (også en dyr operation
i forhold til stakken). Derfor kan det være en fordel i at allokere en
masse hukommelse én gang og så bare bruge af det, og aldrig frigive det.
Hvis du f.eks. laver en server, som skal kunne håndtere op til et
konfigurerbart antal samtidige forbindelser, så alloker plads til X
datastrukturer til håndtering af klienterne i starten af programmet.
Så er man fri for at allokere og free'e hele tiden.


 
Home   Subscribe   Mail Archive   Index   Calendar   Search

 
 
Questions about the web-pages to <www_admin>. Last modified 2007-12-01, 02:01 CET [an error occurred while processing this directive]
This page is maintained by [an error occurred while processing this directive]MHonArc [an error occurred while processing this directive] # [an error occurred while processing this directive] *