#include <stdio.h>
#include <stdlib.h>		// malloc, free

void *my_malloc(size_t size);
void *my_realloc(void *oldptr, size_t new_size);
void my_free(void *ptr);
size_t my_memsize(void *ptr);

int main(void) {
	char *ptr = my_malloc(40);
	printf("Allocated size = %u\n", my_memsize(ptr));
	my_free(ptr);
	return 0;
}

void *my_malloc(size_t size) {
	register size_t *tmp = (size_t *) malloc(size + sizeof(size_t));
	*tmp = size;
	return tmp + 1;
}
void *my_realloc(void *oldptr, size_t new_size) {
	register size_t *tmp = (size_t *) realloc((size_t *)oldptr - 1, new_size + sizeof(size_t));
	*tmp = new_size;
	return tmp + 1;
}
void my_free(void *ptr) {
	free((size_t *)ptr - 1);
}
size_t my_memsize(void *ptr) {
	return *((size_t *)ptr - 1);
}