void * alloc(void * u, void * p, size_t o, size_t n);
u(?)
nがゼロなら開放する
oがゼロだとmalloc的に新たにnだけ確保して返す
oがゼロじゃなければrealloc的にそのまま再利用したり、足りなければ再確保して値をコピーして返す

uって何に使うの?