1. 内存管理**malloc
和free
**
void *zmalloc(size_t size);
void *zcalloc(size_t size);
void *zrealloc(void *ptr, size_t size);
void zfree(void *ptr);
zmalloc
#define PREFIX_SIZE (sizeof(size_t))
void *zmalloc(size_t size) {
void *ptr = malloc(size+PREFIX_SIZE);
if (!ptr) zmalloc_oom_handler(size);
*((size_t*)ptr) = size;
return (char*)ptr+PREFIX_SIZE;
}
zcalloc
void *zcalloc(size_t size) {
void *ptr = calloc(1, size+PREFIX_SIZE);
if (!ptr) zmalloc_oom_handler(size);
*((size_t*)ptr) = size;
return (char*)ptr+PREFIX_SIZE;
}
zrealloc
void *zrealloc(void *ptr, size_t size) {
void *realptr;
void *newptr;
if (ptr == NULL) return zmalloc(size);
realptr = (char*)ptr-PREFIX_SIZE;
newptr = realloc(realptr,size+PREFIX_SIZE);
if (!newptr) zmalloc_oom_handler(size);
*((size_t*)newptr) = size;
return (char*)newptr+PREFIX_SIZE;
}
zfree
void zfree(void *ptr) {
void *realptr;
if (ptr == NULL) return;
realptr = (char*)ptr-PREFIX_SIZE;
free(realptr);
}