34

我的印象是alloc在 Objective-C 中(当我们调用[anyObject alloc]实际上是实现 C 函数malloc并且内存在堆中分配时,但在任何地方都找不到答案。

另外,在搜索时alloc,我发现allocawhich 在堆栈中分配内存。如果我没记错的话,alloc在堆中分配内存来创建对象。

alloc那么,和malloc(和)有什么区别alloca?谁能总结一下?

4

3 回答 3

60

alloc()不是标准 C 库函数。一些较旧的编译器和库包含<alloc.h>提供一些内存分配功能的库,但这不是标准的。Microsoft Visual C++ 运行时包含一个Alloc()有点类似于 的函数malloc(),但这也不是 C 标准的一部分。

malloc()在进程堆上分配内存。使用分配的内存malloc()将保留在堆上,直到使用 释放free()

alloca()在当前函数的栈帧中分配内存。当当前函数返回时,使用分配alloca()的内存将从堆栈中删除。alloca()仅限于小额分配。

合适的情况alloca()很少见。在几乎所有情况下,您都应该使用malloc()来分配内存。

于 2015-09-21T00:55:28.143 回答
-3

alloc函数用于分配长度为heap.

malloc函数用于分配heap存储。它的名字代表内存分配。

于 2016-06-01T22:38:48.743 回答
-8

我不记得 C++ Primer 一书中的逐字声明,但函数之间存在重大差异。例如 C++ 中的 new 分配内存,但它也将数据构造到内存中。std::allocator 分配内存,但不调用任何构造函数。这些 C 函数也是如此。一个分配但不构造。一是分配建设。

于 2019-02-20T20:48:43.017 回答