eGospodarka.pl
eGospodarka.pl poleca

eGospodarka.plGrupypl.comp.programmingMemory pool › Re: Memory pool
  • Data: 2009-01-06 11:29:02
    Temat: Re: Memory pool
    Od: Michał 'Khorne' Rzechonek <k...@g...com> szukaj wiadomości tego autora
    [ pokaż wszystkie nagłówki ]

    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;
    };

Podziel się

Poleć ten post znajomemu poleć

Wydrukuj ten post drukuj

Najnowsze wątki z tej grupy


Najnowsze wątki

Szukaj w grupach

Eksperci egospodarka.pl

1 1 1

Wpisz nazwę miasta, dla którego chcesz znaleźć jednostkę ZUS.

Wzory dokumentów

Bezpłatne wzory dokumentów i formularzy.
Wyszukaj i pobierz za darmo: