重新分配内存的正确和最佳方法是什么? 例如,我使用WinAPI函数HeapAlloc分配100个字节 然后我用一些数据填充100个字节的内存,现在我想在之前的末尾添加更多新数据...
我该怎么办? 使用更多字节进行新分配,然后将旧+新复制到新位置并释放旧内存? 或者有一些方法可以在旧数据末尾分配新内存,然后只复制新数据?
答案 0 :(得分:2)
您应该使用HeapReAlloc,因为如果只是在不复制数据的情况下扩展内存,Windows无疑会有优化。
例如,我见过realloc
(C标准版)的实现,它检查当前块是否可以吸收跟随它的空闲块。如果是这样,它就是为了避免复制操作。如果没有,它会分配新内存并在释放旧内存之前执行复制。
另一个优点是可以最大限度地减少所需的额外内存。在复制版本中,您必须在某个时刻存在两个当前数据副本。
答案 1 :(得分:1)