假设我已经使用方法1:直接转到
方法二:缩小到
方法三:分配一个新的内存块并复制前
ptr = malloc(old_size);
来分配一个有old_size
字节的内存块。只有前header_size
字节是有意义的。现在我将增加尺寸到new_size
。
new_size
大于old_size
,而old_size
大于header_size
。
之前:
/- - - - - - - old_size - - - - - - - \
+===============+---------------------+
\-header_size-/
之后:
/- - - - - - - - - - - - - - - new_size - - - - - - - - - - - - - - - - - - -\
+===============+------------------------------------------------------------+
\- header_size-/
我不在乎在ptr + header_size
之后存储了什么,因为我会将一些数据读取到那里。
方法1:直接转到new_size
ptr = realloc(ptr, new_size);
方法二:缩小到header_size
并增大到new_size
ptr = realloc(ptr, header_size);
ptr = realloc(ptr, new_size);
方法三:分配一个新的内存块并复制前header_size
个字节
void *newptr = malloc(new_size);
memcpy(newptr, ptr, header_size);
free(ptr);
ptr = newptr;
哪个更快?
header_size
的数据,所以我不关心里面有什么。 - lqs