【发布时间】:2011-10-05 11:27:18
【问题描述】:
比如我想要这样一个功能:
char *dst = (char*)malloc(512);
char *src = (char*)malloc(1024);
...
dst = (char*)realloc(dst, 1024);
memcpy(dst, src, 1024);
如你所见,我只是想让函数 realloc() 扩展缓冲区的大小,但 C 库中的 realloc() 可能会从旧地址复制数据。那么任何库中是否有我想要的功能?
【问题讨论】:
-
如果您不关心旧内容,为什么不直接
free/malloc缓冲区? -
不要转换
malloc()的返回值。它充其量是多余的,并且可能隐藏编译器在没有它时会发现的错误。 -
遗憾的是,在用 C++ 编写 C-esk 代码时,您必须强制转换它。我敢打赌这就是正在发生的事情。
-
我明白为什么不能可靠地扩展内存。但是可靠地缩小分配呢?例如,我过度分配了一个内存池,当程序达到稳态时,我将池重新分配到更小的大小。
-
@Mat:减少内存碎片是原因之一。