我的印象是alloc
在 Objective-C 中(当我们调用[anyObject alloc]
实际上是实现 C 函数malloc
并且内存在堆中分配时,但在任何地方都找不到答案。
另外,在搜索时alloc
,我发现alloca
which 在堆栈中分配内存。如果我没记错的话,alloc
在堆中分配内存来创建对象。
alloc
那么,和malloc
(和)有什么区别alloca
?谁能总结一下?
我的印象是alloc
在 Objective-C 中(当我们调用[anyObject alloc]
实际上是实现 C 函数malloc
并且内存在堆中分配时,但在任何地方都找不到答案。
另外,在搜索时alloc
,我发现alloca
which 在堆栈中分配内存。如果我没记错的话,alloc
在堆中分配内存来创建对象。
alloc
那么,和malloc
(和)有什么区别alloca
?谁能总结一下?
alloc()
不是标准 C 库函数。一些较旧的编译器和库包含<alloc.h>
提供一些内存分配功能的库,但这不是标准的。Microsoft Visual C++ 运行时包含一个Alloc()
有点类似于 的函数malloc()
,但这也不是 C 标准的一部分。
malloc()
在进程堆上分配内存。使用分配的内存malloc()
将保留在堆上,直到使用 释放free()
。
alloca()
在当前函数的栈帧中分配内存。当当前函数返回时,使用分配alloca()
的内存将从堆栈中删除。alloca()
仅限于小额分配。
合适的情况alloca()
很少见。在几乎所有情况下,您都应该使用malloc()
来分配内存。
该alloc
函数用于分配长度为heap
.
该malloc
函数用于分配heap
存储。它的名字代表内存分配。
我不记得 C++ Primer 一书中的逐字声明,但函数之间存在重大差异。例如 C++ 中的 new 分配内存,但它也将数据构造到内存中。std::allocator 分配内存,但不调用任何构造函数。这些 C 函数也是如此。一个分配但不构造。一是分配建设。