1

重新分配内存的正确和最佳方法是什么?例如,我使用 WinAPI 函数 HeapAlloc 分配 100 个字节,然后我用一些数据填充该内存的 100 个字节,现在我想在上一个结尾添加更多新数据......

我该怎么办?使用更多字节进行新分配,然后将旧+新复制到新位置并释放旧内存?或者有一些方法可以在旧数据末尾分配新内存,然后只复制新数据?

4

2 回答 2

2

您可能应该使用HeapReAlloc,因为如果 Windows 可以在不复制数据的情况下扩展内存,那么它无疑会进行优化。

例如,我见过realloc(C 标准)的实现,它检查当前块是否可以只吸收它后面的空闲块。如果是这样,它会这样做以避免复制操作。如果没有,它会分配新内存并在释放旧内存之前进行复制。

这样做的另一个优点是您可以最大限度地减少所需的额外内存。在副本版本中,您必须在某个时刻拥有当前数据的两个副本。

于 2010-06-13T13:10:09.620 回答
1

堆重新分配

于 2010-06-13T13:10:31.923 回答