Распределитель памяти C и строгий псевдоним

даже после того, как я довольно много прочитал о правилах строгого псевдонима, я все еще в замешательстве. Насколько я понял, невозможно реализовать разумный распределитель памяти, который следует этим правилам, потому что malloc никогда не может повторно использовать освобожденную память, поскольку память может использоваться для хранения разных типов при каждом распределении.

Ясно, что этого не может быть. Что мне не хватает? Как реализовать распределитель (или пул памяти), который следует строгому псевдониму?

Спасибо.

Изменить: Позвольте мне прояснить свой вопрос на глупом простом примере:

// s == 0 frees the pool
void *my_custom_allocator(size_t s) {
    static void *pool = malloc(1000);
    static int in_use = FALSE;
    if( in_use || s > 1000 ) return NULL;
    if( s == 0 ) {
        in_use = FALSE;
        return NULL;
    }
    in_use = TRUE;
    return pool;
}

main() {
    int *i = my_custom_allocator(sizeof(int));
    //use int
    my_custom_allocator(0);
    float *f = my_custom_allocator(sizeof(float)); //not allowed...
}
8
задан curiousguy 13 December 2011 в 08:31
поделиться