Важным уроком здесь является то, что стандарт описывает эффекты из malloc()/realloc()
, а не то, что они на самом деле делают .Это сделано для того, чтобы предоставить разработчикам стандартной библиотеки свободу в оптимизации, сокращении или изменении поведения этих функций, не затрагивая код, который их использует. Стандарт не позволяет вам делать предположения о том, что умно или что происходит, потому что это может быть не так.
С точки зрения программиста, это может быть распределителем (за исключением некоторой проверки ошибок)):
void*
malloc(size_t amt){
static char *base = NULL;
if(base==NULL)
base = sbrk(0);
char *c = base+1;
base=sbrk(amt+5);
return c;
}
void*
realloc(void *old, size_t amt){
return memcpy(malloc(amt), old, amt);
}
void free(void *v){}
Я называю ее swalloc
, Глупый расточитель.