#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) {
}
size_t my_memsize(void *ptr) {
return *((size_t *)ptr - 1);
}
I2luY2x1ZGUgPHN0ZGlvLmg+CiNpbmNsdWRlIDxzdGRsaWIuaD4JCS8vIG1hbGxvYywgZnJlZQoKdm9pZCAqbXlfbWFsbG9jKHNpemVfdCBzaXplKTsKdm9pZCAqbXlfcmVhbGxvYyh2b2lkICpvbGRwdHIsIHNpemVfdCBuZXdfc2l6ZSk7CnZvaWQgbXlfZnJlZSh2b2lkICpwdHIpOwpzaXplX3QgbXlfbWVtc2l6ZSh2b2lkICpwdHIpOwoKaW50IG1haW4odm9pZCkgewoJY2hhciAqcHRyID0gbXlfbWFsbG9jKDQwKTsKCXByaW50ZigiQWxsb2NhdGVkIHNpemUgPSAldVxuIiwgbXlfbWVtc2l6ZShwdHIpKTsKCW15X2ZyZWUocHRyKTsKCXJldHVybiAwOwp9Cgp2b2lkICpteV9tYWxsb2Moc2l6ZV90IHNpemUpIHsKCXJlZ2lzdGVyIHNpemVfdCAqdG1wID0gKHNpemVfdCAqKSBtYWxsb2Moc2l6ZSArIHNpemVvZihzaXplX3QpKTsKCSp0bXAgPSBzaXplOwoJcmV0dXJuIHRtcCArIDE7Cn0Kdm9pZCAqbXlfcmVhbGxvYyh2b2lkICpvbGRwdHIsIHNpemVfdCBuZXdfc2l6ZSkgewoJcmVnaXN0ZXIgc2l6ZV90ICp0bXAgPSAoc2l6ZV90ICopIHJlYWxsb2MoKHNpemVfdCAqKW9sZHB0ciAtIDEsIG5ld19zaXplICsgc2l6ZW9mKHNpemVfdCkpOwoJKnRtcCA9IG5ld19zaXplOwoJcmV0dXJuIHRtcCArIDE7Cn0Kdm9pZCBteV9mcmVlKHZvaWQgKnB0cikgewoJZnJlZSgoc2l6ZV90ICopcHRyIC0gMSk7Cn0Kc2l6ZV90IG15X21lbXNpemUodm9pZCAqcHRyKSB7CglyZXR1cm4gKigoc2l6ZV90ICopcHRyIC0gMSk7Cn0=