[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?



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 :-)

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 :-)

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.


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.

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).

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.

Hilsen Anders

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