【发布时间】:2021-12-30 23:34:50
【问题描述】:
根据here 所写的内容,new 在free store 中分配,而malloc 使用heap,这两个术语通常意味着相同的东西。 p>
根据here 所写的内容,realloc 可能会将内存块移动到新位置。如果free store和heap是两个不同的内存空间,那是不是意味着什么问题呢?
特别想知道使用是否安全
int* data = new int[3];
// ...
int* mydata = (int*)realloc(data,6*sizeof(int));
如果没有,有没有其他方法可以安全地使用new 分配realloc 内存?我可以分配新区域和memcpy 的内容,但据我了解realloc 可能会尽可能使用相同的区域。
【问题讨论】:
-
只需使用
vector。 -
@KarolyHorvath 你怎么知道这在任何情况下都是可行的方法?如果在没有标准库支持的情况下部署嵌入式系统呢?与可能执行重新分配的 C 接口集成怎么样?
-
@KarolyHorvath 欢迎您对
malloc(几微秒)与std::vector(~200 毫秒!)分配 200 MB 内存所需的时间进行基准测试。std::vector并不是所有内存问题的灵丹妙药 -
@DavidHaim:我不敢相信,但我也对其进行了基准测试,问题似乎是向量对内存的零初始化。
int* n = new int[200 * 1024 * 1024]{};在 MSVC 上的性能大致相同。 -
@DavidHaim: 否
reserve不会将字节归零。您可能会将其与resize混淆。
标签: c++ memory-management realloc