【问题标题】: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;所示?

标签: c++


【解决方案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 的规范,但这不是问题所在。
    猜你喜欢
    • 1970-01-01
    • 2015-11-21
    • 2016-07-19
    • 2015-12-17
    • 2014-08-13
    • 2013-10-25
    • 1970-01-01
    • 1970-01-01
    • 2015-12-17
    相关资源
    最近更新 更多