【发布时间】:2012-10-26 04:46:30
【问题描述】:
假设我使用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 之后存储的内容,因为我会向那里读取一些数据。
方法一:直接去new_size
ptr = realloc(ptr, new_size);
方法2:缩小到header_size并增长到new_size
ptr = realloc(ptr, header_size);
ptr = realloc(ptr, new_size);
方法3:分配一个新的内存块,复制第一个header_size字节
void *newptr = malloc(new_size);
memcpy(newptr, ptr, header_size);
free(ptr);
ptr = newptr;
哪个更快?
【问题讨论】:
-
@nos 我会在重新分配后写一些超出
header_size的数据,所以我不在乎里面有什么。
标签: c memory-management malloc realloc libc