[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++]heap allokering?



On Thu, 2004-08-12 at 00:20, Peter Makholm wrote:
> Bo Simonsen <sslug@sslug> writes:
> 
> > Lyder absurt, hvordan kan du vurdere at hukommelsen ikke bliver
> > frigivet.. Du kan muligvis stadig få fat i hukommelses området med de
> > samme data som der var før free(), men det free() gør at den slette det
> > memory område i Operativ systemet memory tabel, ergo ved OS'et den kan
> > bruge memory området igen.
> 
> Det er faktisk ikke normalt at free frigiver hukommelse direkte til
> styresystemet (altså kernen). Oftest vil malloc/free vedligeholde en
> intern heap og kun under visse forhold vil denne heap blive trimmet.

Ja korrekt, men hvad gør man i single process operativ systemer? Der må
formentlig benyttes ovenstående princip.. Altså central registering af
memory allokeringer.. men selvføglelig ikke i OS'et men i selve
processen.

> Det kan nemlig være relativt dyrt at bede kernen om mere eller
> mindre hukommelse, derfor forsøger man ikke at gøre det for tit.

Det er vel kun hvis heap har behov for at vokse?

> > (Jeg mener ikke malloc er et system kald direkte til kernel, jeg mener
> > man skal igennem nogle andre funktioner).
> 
> I glibc bliver store blokke allokeret med mmap og mindre bidder fra en
> heap hvis størelse ændres med sbrk. 

sbrk er også nævnt i ikke-ansi udgaven af K&R.

> > Men tænk på hvor mange programmer der bruger malloc/free, så jeg tendere
> > mere til det må være en programmeringsfejl i dit software desværre.
> 
> Når man programmerer embedded systemer uden en MMU må man være
> forberedt på at hugge en hæl og skære en tå i forbindelse med
> hukommelsesstyring.

Ja, men så har man vel også næsten hele hovedlageret for sig selv.

> Det lyder ikke usandsynligt at MicroBlaze af performancehensyn bare
> lader free være en noop.

Men det kan da ikke være rigtigt at et hukommelseskrævet program bliver
nødt til at stoppe under kørselen fordi der ikke er mere hukommelse pga.
free's ikke bliver registeret. Eller misforstår jeg dig?

Bo




 
Home   Subscribe   Mail Archive   Index   Calendar   Search

 
 
Questions about the web-pages to <www_admin>. Last modified 2005-08-10, 22:44 CEST [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] *