-
1. Data: 2009-01-05 10:53:42
Temat: Memory pool
Od: Maciej Piechotka <u...@g...com>
Czy ktoś zna dobry opis tworzenia memory pool? Chodzi mi o strukturę
która może:
- Zaalokować blok o znanej wielkości (w czasie kompilacji)
- Zwolnić wcześniej zaalokowany blok
- 'Poprosić' o więcej miejsca (w określonych jednostkach [stronach])
Czy ktoś zna dobry opis? Próbowałem szukać w google ale najczęściej są
tam opisy jak to działa od strony użytkownika.
Pozdrawiam
--
I've probably left my head... somewhere. Please wait untill I find it.
Homepage (pl_PL): http://uzytkownik.jogger.pl/
(GNU/)Linux User: #425935 (see http://counter.li.org/)
-
2. Data: 2009-01-05 21:21:59
Temat: Re: Memory pool
Od: Michał 'Khorne' Rzechonek <k...@g...com>
On 5 Sty, 11:53, Maciej Piechotka <u...@g...com> wrote:
> Czy ktoś zna dobry opis tworzenia memory pool? Chodzi mi o strukturę
> która może:
> - Zaalokować blok o znanej wielkości (w czasie kompilacji)
> - Zwolnić wcześniej zaalokowany blok
> - 'Poprosić' o więcej miejsca (w określonych jednostkach [stronach])
Jak chcesz alokować cokolwiek w czasie kompilacji?
Chodzi ci o alokator? Algorytmów jest od groma. Jednym z
fajniejszych jest http://rtportal.upv.es/rtmalloc nawet masz gotowa
implementacje.
Alokatory bloków o stałej wielkości robi się prościej, ładny C++owy
przykład jest u Alexandrescu, implementacja np.
http://loki-lib.sourceforge.net/html/a00133.html
pozdr
Khorne
-
3. Data: 2009-01-06 00:45:44
Temat: Re: Memory pool
Od: Maciej Piechotka <u...@g...com>
Michał 'Khorne' Rzechonek <k...@g...com> writes:
> On 5 Sty, 11:53, Maciej Piechotka <u...@g...com> wrote:
>> Czy ktoś zna dobry opis tworzenia memory pool? Chodzi mi o strukturę
>> która może:
>> - Zaalokować blok o znanej wielkości (w czasie kompilacji)
>> - Zwolnić wcześniej zaalokowany blok
>> - 'Poprosić' o więcej miejsca (w określonych jednostkach [stronach])
>
> Jak chcesz alokować cokolwiek w czasie kompilacji?
>
typ nazwa_zmiennej; w składni C ;)
A poważnie - chodzi o znaną z góry wielkość oczywiście.
> Chodzi ci o alokator? Algorytmów jest od groma. Jednym z
> fajniejszych jest http://rtportal.upv.es/rtmalloc nawet masz gotowa
> implementacje.
>
> Alokatory bloków o stałej wielkości robi się prościej, ładny C++owy
> przykład jest u Alexandrescu, implementacja np.
> http://loki-lib.sourceforge.net/html/a00133.html
>
Chodzi o bloki o stałej wielkości. Poczytam.
> pozdr
> Khorne
Pozdrawiam
--
I've probably left my head... somewhere. Please wait untill I find it.
Homepage (pl_PL): http://uzytkownik.jogger.pl/
(GNU/)Linux User: #425935 (see http://counter.li.org/)
-
4. Data: 2009-01-06 11:29:02
Temat: Re: Memory pool
Od: Michał 'Khorne' Rzechonek <k...@g...com>
On 6 Sty, 01:45, Maciej Piechotka <u...@g...com> wrote:
> Chodzi o bloki o stałej wielkości. Poczytam.
Z palca, "proszenie o wiecej miejsca" jako cwiczenie dla czytelnika,
wystarczy dodac bloki do listy.
template<int Size>
class ChunkAllocator
{
struct Chunk
{
char memory[Size];
Chunk *next;
Chunk(): next(NULL) { }
};
public:
ChunkAllocator(size_t a_count): m_chunks(new Chunk[a_count])
{
for(size_t i = 0; i != a_count-1; ++i)
{
m_chunks[i].next = &m_chunks[i+1];
}
m_current = &m_chunks[0];
}
void *allocate()
{
if(m_current == NULL)
{
return NULL;
}
void *ptr = m_current->memory;
m_current = m_current->next;
return ptr;
}
void deallocate(void *a_chunk)
{
if(a_chunk == NULL)
{
return;
}
Chunk *chunk = reinterpret_cast<Chunk*>(a_chunk);
chunk->next = m_current;
m_current = chunk;
}
private:
Chunk *m_current;
Chunk *m_chunks;
};