[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] Hvad koster en malloc og free



In <sslug@sslug> "Lars Riisgaard Ribe" <sslug@sslug> writes:

>Jeg sidder og arbejder på noget C-kode, og i den forbindelse har jeg
>en funktion, hvor jeg er nødt til at oprette et midlertidigt array af
>størrelsen 8-12 floats - oprettelsen (og nedlæggelsen) sker med
>malloc og free.

>Funktionen kaldes adskillige tusinde gange under program-eksekvering,
>så jeg kom pludselig til at tænke på, om jeg kan få
>hukommelsesfragmentering af dette, eller om så mange oprettelser 
>og nedlæggelser er en flaskehals?

GNU's malloc er ret god til at håndtere den slags allokeringer. Min
erfaring er i al fald at det ikke er noget problem.

Alternativt kan man komme uden om det ved at erklære dit midlertidige
array som "static", og så kun malloc'e det første gang det kaldes.
Sådan noget som

void minfunc(void)
{
	static float **mitarray = NULL;

	if (mitarray == NULL) mitarray = malloc(96*sizeof(float));

 	/* Resten af din kode */
}

Ulempen ved *den* metode er så at funktionen ikke er re-entrant,
så det duer ikke hvis funktionen skal kunne kaldes nested.


Mvh,
Henrik



 
Home   Subscribe   Mail Archive   Index   Calendar   Search

 
 
Questions about the web-pages to <www_admin>. Last modified 2005-11-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] *