From e111975e7b5e9caeaa8155dc10ce7849db528f03 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Eckl=2C=20M=C3=A1t=C3=A9?= <ecklm@sch.bme.hu> Date: Tue, 14 Apr 2015 07:02:26 +0200 Subject: [PATCH] =?UTF-8?q?Apr=C3=B3s=C3=A1gok=20+=20kis=20komment.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- NHF/include/mem_block.h | 26 +++++++++++++++++++++++--- NHF/src/heap.cpp | 14 +++++++++++--- 2 files changed, 34 insertions(+), 6 deletions(-) diff --git a/NHF/include/mem_block.h b/NHF/include/mem_block.h index a6b9647..c09287d 100644 --- a/NHF/include/mem_block.h +++ b/NHF/include/mem_block.h @@ -1,6 +1,9 @@ #ifndef MEM_BLOCK_H #define MEM_BLOCK_H +/** \brief A memória megvalósítása során használt típus. + * Mindenhol ez a typedef alkalmazandó. + */ typedef unsigned int memnum; /** \brief Egyetlen byte. @@ -10,16 +13,33 @@ typedef unsigned int memnum; struct mem_block { memnum block_size;/**< Annak a blokknak a mérete, aminek az elején ez a byte áll */ - bool filled;/**< Jelzi, hogy az adott byte épp foglalt-e */ + bool filled;/**< Jelzi, hogy az adott byte épp foglalt-e. true=folgalt, false=szabad.*/ + /** \brief Beállítja a byte adatait töltetlenre, és 0 blokkméretre * \param false */ mem_block():block_size(0),filled(false){} - void set(bool fill=false, memnum block_size=0) + + /** \brief Beállítja egy byte értékét a paraméterek által megadott értékre. + * Paraméterek nélkül megadva alapértelmezett (false,0) értéket állít be. + * + * \param filled=false bool A töltöttség értéke. + * \param block_size=0 memnum Foglalt blokk esetén, az elkezdett blokk mérete. + * \return void + * + */ + void set(bool filled=false, memnum block_size=0) { - filled=fill; + this->filled=filled; this->block_size=block_size; } + + /** \brief Meghívja set() függvényt paraméterek nélkül. + * Más szóval alapértelmezett értékre állítja egy memóriablokk tagjait. + * + * \return void + * + */ void reset(){set();}//Csak kényelemből, nem biztos, hogy érdemes bennehagyni. }; diff --git a/NHF/src/heap.cpp b/NHF/src/heap.cpp index a6c6fe8..c29e9d8 100644 --- a/NHF/src/heap.cpp +++ b/NHF/src/heap.cpp @@ -49,6 +49,8 @@ void heap::free(const memnum pid) { if(pid<0 || pid>size) throw "Kivétel";//hibakezelés jobban + if(!blocks[pid].filled) + throw "Érvénytelen pid.";//hibakezelés jobban memnum next_block_idx=pid+blocks[pid].block_size; for(memnum i=pid+1; i<next_block_idx; i++) blocks[i].reset(); @@ -56,8 +58,11 @@ void heap::free(const memnum pid) * Az új üres blokk méreténél figyelembe kell venni, * hogy az utána következő blokk telített, illetve, * hogy az előtte lévő blokk telített-e. + * Ezeket adott esetben össze kell vonni. + * ....====.... -> ............ (Ez a legrosszabb eset.) */ - memnum before=0,after=next_block_idx; + //Meg kell keresni az éppen kezelt blokk előtti és utáni blok elejét. + memnum before=0,&after=next_block_idx;//after úgyis egyenlő nex_block_idx-szel for(memnum i=0; i<size; i+=blocks[i].block_size) { if(i+blocks[i].block_size==pid) @@ -66,15 +71,18 @@ void heap::free(const memnum pid) break; } } + /* + * Meg kell vizsgálni, hogy a kettő közül melyik telítetlen, + * majd a kiválasztott blokk legelejét beállítani egy new_empty_block_size értékére. + */ if(!blocks[before].filled)//ha előtte is van üres memóroaterület { } - blocks[pid].set(false,blocks[pid].block_size+blocks[next_block_idx].block_size); - blocks[next_block_idx].reset(); } std::ostream& operator<<(std::ostream& os,heap& mem) +//Még csak teszt jelleggel, a későbbiekben ez a függvény teljesen más funkcíiót fog ellátni. { for(memnum i=0; i<mem.size;i++) { -- GitLab