даже после того, как я довольно много прочитал о правилах строгого псевдонима, я все еще в замешательстве. Насколько я понял, невозможно реализовать разумный распределитель памяти, который следует этим правилам, потому что 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...
}