我的印象是在Objective-C中的alloc
(当我们调用[anyObject alloc]
实际上是实现C函数malloc
并且内存在堆中分配,但无法找到答案。
此外,在搜索alloc
时,我发现alloca
在堆栈中分配内存。如果我没有错,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函数也是如此。一个分配但不构建。一个分配和构建。