【发布时间】:2014-09-12 11:17:12
【问题描述】:
每次迭代我都需要为一个临时数组分配一次空间。我尝试使用 realloc 每次迭代来优化内存使用。像这样:
int *a = (int*)std::alloc(2 * sizeof(int));
for(int i=0; i<N; ++i)
{
int m = calculate_enough_size();
a = (int*)std::realloc(m * sizeof(int));
// ...
}
std::free(a);
N 是一个很大的数字,例如 1000000。每次迭代都有示例 m 值:8,2,6,10,4,8
当我在每次迭代中重新分配 a 时,我做得对吗?是否防止冗余内存分配?
【问题讨论】:
-
是否需要跨迭代维护数组的内容?
-
你可以通过迭代保存当前的 a 大小,只有在需要更多大小时才重新分配
-
没有。 'a' 在每个 realloc 之后填充 'm' 新值
-
一次性分配你需要的最大尺寸。然后在每次迭代中将值重置为默认值,然后根据需要使用它。
-
@user743414 在迭代之前不可能得到最大的'm'值
标签: c++ memory-management realloc