void *aligned_malloc(int size, int align)
{
void *p = malloc(sizeof(void *) + size + align);
size_t mask = ~(align - 1);
size_t p2 = ((size_t)p + align + sizeof(void *)) & mask;
*((void **)p2 - 1) = p;
return (void *)p2;
}
void aligned_free(void *p)
{
void *p1 = *((void **)p - 1);
free(p1);
}