[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 01:54, Anders Hellerup Madsen wrote:
> Bo Simonsen wrote:
>   > Så forstår jeg bedre, i det der absolut ikke er noget problem med linux.
> 
> Nix - jeg undskyldte jo også netop at det ikke var et linux spørgsmål. 
> Jeg har bare erfaring for at der er en del kloge mennesker på denne 
> liste :-)

Ja, men det er jo lidt svært at forholde sig til os'er man ikke kender,
når det er et ret os specifikt spørgsmål.

> > 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.
> 
> Som jeg også svarede til Egon, er grunden til at malloc() / free() ikke 
> virker som forventet, at der slet ikke er implementeret nogen form for 
> hukommelsesstyring.
> 
> http://www.xilinx.com/xlnx/xil_ans_display.jsp?getPagePath=12421&iLanguageID=1
> 
> Det fungerer sådan at en process kan tildeles et kombineret stack/heap 
> område. Stacken starter fra bunden af området, og virker som forventet 
> (dvs. stack pointeren stiger og falder alt efter hvor meget stack der er 
> brugt). Heapen starter fra toppen og base pointeren gror nedaf, hver 
> gang malloc() kaldes - free() gør intet. Når heap og stack pointeren 
> mødes virker systemet ikke mere :-)

I følge diverse operativsystemsbogforfattere er det vidst en meget
traditionel måde at implementere hukommelses styring på, lidt for
traditionel til at være modernet.

> > 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.
> 
> Det er et indlejret system, så jeg har _ret_ godt styr over hvilke 
> programmer der kører. Som sådan kan jeg også sagtens komme uden om at 
> bruge malloc()/free(), jeg kan bare holde mig til stacken, og tildele 
> hver process et seperat stack område, men nogen ting ville altså give 
> mest mening hvis de var lavet med en form for dynamisk allokering.

Jeg læste først det var et ikke-linux problem til sidst. Jeg ved selv
(dog som nybegynder), blev man næsten overbevist om der var fejl i
specielt realloc, men det er også ekstrem følsom, så hellere hægtede
lister!

> Det jeg har gjort er at jeg har allokeret et hukommelses område der ikke 
> bliver brugt af nogen processer. Så har jeg to funktioner (heap_alloc og 
> heap_free) og en liste over brugte og tomme blokke.

.. som operativsystemet kender til, men du tager chancen eller?

Lyder meget ricikabelt, men når der ikke er mange andre løsninger :/

> Når jeg allokerer hukommelse finder jeg en fri blok af en passende 
> størrele og markerer den som brugt (evt. splitter den til en fri og en 
> brugt blok).

Lyder næsten som programmeringen af en virtuel maskine. 

> Når jeg frigiver hukommelse markerer jeg blokken som fri, og undersøger 
> i listen om den just frigivne blok grænser op til andre frie områder. 
> Gør den det slår jeg dem sammen.
> 
> Det ser ud til at virke udmærket.

Det burde bare ikke være meningen det skulle være så compliceret, me
nuvel når operativsystemet ikke understøtter det.

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