[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 Wed, 2004-08-11 at 20:45, Anders Hellerup Madsen wrote:

> Jeg har et system hvor standard malloc() og free() funktionerne ikke 
> fungerer ordenligt. Hukommelsen bliver fint allokeret med malloc(), men 
> free() frigiver ikke noget. Det vil altså sige, at hvis man dynamisk 
> allokerer hukommelse, så vil man uundgåeligt ramme panden mod muren på 
> et tidspunkt.

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 derfor du skal benytte null stilling af variable og evt.
memset().

> Jeg forestiller mig ikke det er specielt besværligt og lave nogen 
> funktioner der allokerer en ordenlig bunke heap, og så deler hukommelse 
> ud i mindre bunker alt efter behov, f.eks. en heap_alloc() og 
> heap_free() funktion der virker ligesom malloc() og free().

malloc og free _virker_, se mit svar til egon, om at jeg har haft en
maskine til at løbe tør for hukommelse.

> Problemet kommer når jeg har lyst til at bruge funktionerne til at 
> allokere plads til c++ objekter, altså som en slags erstatning for new 
> og delete. Kan det overhovedet lade sig gøre?

Brug new og delete hvis du arbejder med objecter.. malloc/free kører
ikke contructor/destructor, i det, det formentlig er et direkte kald til
glibc og ikke libstdc++.

(Jeg mener ikke malloc er et system kald direkte til kernel, jeg mener
man skal igennem nogle andre funktioner).

> Jeg forestiller mig at new og delete bruger malloc() og free() til at 
> reservere hukommelse, men jeg har ikke andet og have det i end at sådan 
> ser det ud. Systemet er et indlejret system bygget op på en Xilinx FPGA 
> og med en Xilinx MicroBlaze CPU. 

Det gør new og delete netop. 

> Det defekte C library er et GNU C/C++ 
> library Xilinx har porteret til at kunne køre på deres system.
> 
> Jeg undskylder, at det ikke har specielt meget med Linux at gøre, men 
> jeg håber der er nogen der kan være mig behjælpelige. Evt. bare med et 
> svar hen af "Det kan ikke lade sig gøre", for så kan jeg i det mindste 
> komme til, at bruge min tid til noget andet.

Så forstår jeg bedre, i det der absolut ikke er noget problem med linux.
Du er lidt ude at skide når du ikke kan bruge malloc. Det du kan lave er
at du kan lave et char[] der går til limiten (2 GB afaik, skal dit
program bruge mere mem?) og herefter selv styre hukommelses
allokeringen.

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.

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] *