redis中重写了c中的malloc,实现可以记录分配内存空间的大小的分配方式。
void *zmalloc(size_t size) {
void *ptr = malloc(size+PREFIX_SIZE);
return (char*)ptr+PREFIX_SIZE;
}
其中 PREFIX_SIZE =sizeof(size_t))
好处: 通过内存指针,可以知道当前内存空间的大小;
char *p = zmalloc(100);
内存大小计算 size_t *size = (size_t *)( p - PREFIX_SIZE);
size[0] 即为内存空间中有效存储的大小。