【发布时间】:2013-06-21 12:59:30
【问题描述】:
在 C 中,我们有 malloc()、free() 和 realloc()。在 C++ 中,我们有 new()、delete() 及其数组版本。有 C++ realloc 函数吗?我在嵌入式领域实现了一些低级的东西,刚刚意识到没有 realloc 函数可以与 C++ 函数配对,并想确保我没有遗漏任何东西。我猜“放置新”到一个新的、单独的缓冲区是最接近的匹配,但想确定一下。
因为我得到的答案有点远,所以稍微重述一下这个问题。
我已经实现了设备级 malloc/new/realloc/etc。我的嵌入式设备上的函数,并想仔细检查以确保没有我不知道的 C++ realloc 类型函数。
【问题讨论】:
-
我曾经问过a similar question。
-
有什么理由不使用可扩展的容器,例如
std::vector?内存问题? -
@Huytard 我想他问的不是他是否可以使用 realloc,而是一种更 C++ 的方式来处理 realloc 所适用的各种情况。他也可以使用 malloc 并将他的对象布置为自己的结构,但他宁愿不这样做;)
-
@MichaelDorgan: 是的...基本上,结果是 C++ 中确实不需要这个。
vector已经作为摊销不变的推回成本,所以实际上没有任何渐近问题开始。 -
@KerrekSB 另一方面,现代分配器能够区分小对象和大对象并以不同的方式处理它们。在类 Unix 平台上,大对象可以(并且在 Linux 上)使用
mmap分配,并使用mremap重新分配,在这种情况下,可能会有一个 从不 复制的 realloc(足够大的块)。
标签: c++ c memory-management