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