首先,我知道我错了,但我不知道我的错误是什么。 据this link,关于“realloc的”它说,C++ realloc性能vs malloc
的内存块的内容被保留到新老大小的较少,即使块移动到新的位置。如果新尺寸较大,则新分配的部分的值不确定。
因此,如果我们使用“realloc”如果它想分配新的位置数据,它会复制以前的数据到新的位置。所以如果这是真的,我很好奇知道是不是更好地使用free
+ malloc
而不是realloc?因为我认为当我们考虑性能时,将以前的数据复制到新位置并不是一个好主意。
任何人都可以帮助我找出我的错误在哪里吗? 在此先感谢。
我认为realloc会选择一个新的位置并复制到它很罕见,但假设一个新的位置永远不会被选择可能会导致UB。最好只使用realloc并忽略最小和罕见的性能后果。 – George
使用'realloc'的主要目的是使用已分配缓冲区中的数据,因为它具有一些额外的空间。如果你不需要现有的数据,那么你可以做'free + malloc'。手动复制在性能方面会更差,因为libc非常优化,如果有足够多的连续空间满足新的分配要求,甚至可能不需要复制。 – sardok
为什么标记为C++?你不应该在C++中使用malloc/realloc来开始。 – Lundin