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<>
,那是std::allocator::allocate
(我无法想象“代码广泛使用它”始终是分配器实现的一部分,尤其是这个@ 987654327@ 示例)。
@CoryKlein:等等,什么? std::allocator<T>
中allocate
的哪个重载接受了char
这样的类型参数,如allocate<char>
所示?
【参考方案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,您可以看到new
和malloc
导致不同的结果。
【讨论】:
那么它和malloc有什么不同呢? 那是哪个文档?看起来它是在解释std::allocator<T>::allocate
的规范,但这不是问题所在。以上是关于malloc 和 allocate 有啥区别的主要内容,如果未能解决你的问题,请参考以下文章
alloc()malloc()calloc()realloc()区别及用法
iOS 中的 [Class new] 和 [[Class alloc] init] 有啥区别? [复制]
C ++中的“new”和“malloc”和“calloc”有啥区别? [复制]