malloc 和 allocate 有啥区别

Posted

技术标签:

【中文标题】malloc 和 allocate 有啥区别【英文标题】:what is difference between malloc and allocatemalloc 和 allocate 有什么区别 【发布时间】:2013-06-10 01:00:55 【问题描述】:

我遇到了一些广泛使用allocate 的代码。例如,

char* recordDate = allocate<char>(20)

我以前从未使用过 allocate,因此问题是,malloc 和 allocate 有什么区别?

虽然我不清楚它的优势,但我可以说的一个区别是,malloc 提供原始内存,而 allocate 似乎会提供原始内存,但我不必将指针转换为特定类型。

【问题讨论】:

allocate 到底是什么? @Mehrdad 它是标准的一部分。见 std::allocator::allocate en.cppreference.com/w/cpp/memory/allocator/allocate @CoryKlein 那不是allocate&lt;&gt;,那是std::allocator::allocate(我无法想象“代码广泛使用它”始终是分配器实现的一部分,尤其是这个@ 987654327@ 示例)。 @CoryKlein:等等,什么? std::allocator&lt;T&gt;allocate的哪个重载接受了char这样的类型参数,如allocate&lt;char&gt;所示? 【参考方案1】:

从概念上讲,这两个函数的作用完全相同。唯一一次你会看到不同的是,如果你开始“查看函数的内部”或者内存不足(malloc 将返回 NULL,因为allocate 调用了::new,它会抛出一个@ 987654324@ 异常)。

我认为使用 allocate 是“更好的 C++”(如果没有其他原因,只是“你不必强制转换 allocate)。

话虽如此,使用::new T[elements] 将是C++ 中的正常方式,并且在您传入allocator 的地方之外,这就是您应该做的。

【讨论】:

真的,每个人都在谈论的allocate 模板是什么(并且回答者似乎被认为是给定的)?【参考方案2】:

似乎不同之处在于,使用allocate,您只需提供所需项目的数量而不是总大小,返回类型会自动转换为适合您的正确类型。

在 C++ 中,您几乎不应该使用任何一个,但更喜欢 new,它将调用适当的构造函数。

【讨论】:

【参考方案3】:

来自allocate 文档:

通过调用::operator new(std::size_t) 分配n * sizeof(T) 字节的未初始化存储,但未指定何时以及如何调用此函数

另外,从this question,您可以看到newmalloc 导致不同的结果。

【讨论】:

那么它和malloc有什么不同呢? 那是哪个文档?看起来它是在解释 std::allocator&lt;T&gt;::allocate 的规范,但这不是问题所在。

以上是关于malloc 和 allocate 有啥区别的主要内容,如果未能解决你的问题,请参考以下文章

alloc()malloc()calloc()realloc()区别及用法

malloc和数组有啥区别

iOS 中的 [Class new] 和 [[Class alloc] init] 有啥区别? [复制]

C ++中的“new”和“malloc”和“calloc”有啥区别? [复制]

当我必须指定内存大小时,malloc 数组和常规数组有啥区别?

Malloc 和 new 运算符分配内存有啥区别? [复制]