C++ 中是否有类似 realloc 的函数?

13
在C语言中,我们有malloc()free()realloc()函数。在C++中,我们有new()delete()以及它们的数组版本。那么,C++中是否有realloc函数呢?我正在嵌入式领域实现一些底层功能,突然意识到与C++函数配对的realloc函数不存在,想确保自己没有遗漏任何东西。我猜测,“placement new”进入新的、单独的缓冲区是最接近的匹配,但想要确认一下。
稍微重新阐述一下问题,因为我得到了一些离题的答案。
我已在我的嵌入式设备上实现了设备级别的函数,并想再次确认是否有我不知道的C++ realloc类型的函数。

8
我曾经问过一个类似的问题 - Kerrek SB
2
有没有特别的原因不使用可以扩展的容器,比如std::vector?内存方面的考虑吗? - Joachim Isaksson
1
@Huytard 我认为他的问题不是能否使用realloc,而是有没有更C++的方式来处理realloc所用于的情况。他也可以使用malloc并自己布置对象的结构,但他宁愿不这样做 ;) - David Souther
2
@MichaelDorgan:是的...基本上,C++中没有这个需要。vector已经具有分摊常数推入成本,因此一开始就没有任何渐进问题。 - Kerrek SB
2
另一方面,现代分配器能够区分小对象和大对象,并以不同的方式处理它们。在类Unix平台上,大对象可以使用mmap(在Linux上是)进行分配,并使用mremap进行重新分配,在这种情况下,可能会有一个永远不会复制(足够大的块)的realloc。 - user4815162342
显示剩余26条评论
1个回答

4
不,没有直接的等价物。您需要自己进行实现。由于类真的不应该改变其大小,因此这并不是一个问题。移动语义可以处理大多数这些情况。
但是,有一些类使用标题信息+尾部分配的数据。为了正确编码这些内容,您必须覆盖类的operator new()operator delete()函数,以处理此附加的“灵活”数据。如何“重新分配”数据取决于您的需求。
如果这不能回答您的问题,请发布您尝试的示例。

很好的回答,但我相信上面的@KerrekSB给了我所需的信息。在这种情况下,我已经编写了所有低级内存分配粘合代码以适应标准分配器,我只是想确保没有我错过的C++ realloc等效函数。+1和感谢。 - Michael Dorgan
我把奖品给你,因为其他人都陷入了C++11的争论中 :) - Michael Dorgan

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接